我的烧瓶应用程序中有以下结构:
app.py
app = Flask(__name__)
app.config.from_object(os.environ['APP_SETTINGS'])
db = SQLAlchemy(app)
from models import *models.py
from app import db它工作得很好,直到我想在app.py以外的文件中对模型执行读/写操作。我试图在文件Trackorder中导入模型tasks.py,但得到了以下错误:
ImportError: cannot import name TrackOrder所以我改变了结构:
__init__.py
app = Flask(__name__)
app.config.from_object(os.environ['APP_SETTINGS'])
db = SQLAlchemy(app)但这使得app和db在app.py和models.py中不可用。
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我怎样才能解决这个问题?
发布于 2014-12-29 08:45:32
这里有一个可能对你有用的解决方案。
创建一个名为core.py的文件(或任何您想要命名的文件):
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()现在在app.py
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
发布于 2014-12-29 07:23:00
如果没有包含所有import语句的完整代码,很难说,但您很可能有一个循环导入。您正在导入模块A中的模块B和模块A中的模块B,这有副作用,当您将A导入到B(关闭周期的导入)时,A中没有任何低于B的导入:
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语句,如下所示:
def function1():
from a import var1
print(var1)https://stackoverflow.com/questions/27683951
复制相似问题