我正在使用Flask和Sqlalchemy构建应用程序。
我的app.py
文件的开头如下:
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
db = SQLAlchemy(app)
from models import User
我的models.py
是这样的:
from app import db
class User
....
所以当我运行python app.py
时,我收到一条错误消息“无法导入名称用户”。我想在某个地方有一个循环导入,我不明白如何解决它。
但如果我用
创建另一个文件run.py
from app import app
app.run()
一切都很完美。但为什么这会打破循环导入呢?我无法理解这一点。
答案 0 :(得分:2)
你做得对:这是一个循环导入问题。
我解决这个问题的方法是在根目录中使用另一个文件shared.py
文件。在该文件中,创建数据库对象
from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy()
在app/init.py
中,不要创建新的db对象。相反,做
from shared import db
db.init_app(app)
在您想要使用db对象的任何地方,包括您的模型文件,从shared.py
导入它:
from shared import db
# do stuff with db
这样,共享文件中的对象将使用应用程序上下文进行初始化,并且无法进行循环导入。