首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >烧瓶应用程序的导入问题

烧瓶应用程序的导入问题
EN

Stack Overflow用户
提问于 2014-12-29 05:42:25
回答 2查看 2.4K关注 0票数 4

我的烧瓶应用程序中有以下结构:

app.py

代码语言:javascript
复制
app = Flask(__name__)
app.config.from_object(os.environ['APP_SETTINGS'])
db = SQLAlchemy(app)
from models import *

models.py

代码语言:javascript
复制
from app import db

它工作得很好,直到我想在app.py以外的文件中对模型执行读/写操作。我试图在文件Trackorder中导入模型tasks.py,但得到了以下错误:

代码语言:javascript
复制
ImportError: cannot import name TrackOrder

所以我改变了结构:

__init__.py

代码语言:javascript
复制
app = Flask(__name__)
app.config.from_object(os.environ['APP_SETTINGS'])
db = SQLAlchemy(app)

但这使得appdbapp.pymodels.py中不可用。

代码语言:javascript
复制
File "app.py", line 21, in <module>
    from models import *
  File "/home/nish/repos/stage/voylla_api/models.py", line 16, in <module>
    class Product(db.Model):
NameError: name 'db' is not defined

##after commenting models.py:
Traceback (most recent call last):
  File "app.py", line 210, in <module>
    @app.route('/')
NameError: name 'app' is not defined

我怎样才能解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-29 08:45:32

这里有一个可能对你有用的解决方案。

创建一个名为core.py的文件(或任何您想要命名的文件):

代码语言:javascript
复制
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()

现在在app.py

代码语言:javascript
复制
from core import db

app = Flask(__name__)
app.config.from_object(os.environ['APP_SETTINGS'])

# Instead of this line: db = SQLAlchemy(app)
# Use this approach to initialize db
db.init_app(app)

在您的models.py中,可以使用此导入from core import db

这是基于下面的示例:https://pythonhosted.org/Flask-SQLAlchemy/api.html

票数 4
EN

Stack Overflow用户

发布于 2014-12-29 07:23:00

如果没有包含所有import语句的完整代码,很难说,但您很可能有一个循环导入。您正在导入模块A中的模块B和模块A中的模块B,这有副作用,当您将A导入到B(关闭周期的导入)时,A中没有任何低于B的导入:

代码语言:javascript
复制
a.py:
from b import * # Now b.py is evaluated before the execution contiues.
var1 = 0

b.py:
import a
print(a.var1) # This raises an error since var1=0 was not executed yet.

解决方案:在本地重新排序导入或使用import语句,如下所示:

代码语言:javascript
复制
def function1():
    from a import var1
    print(var1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27683951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档