我有几个模块:start.py,user.py,projects.py
在start.py中我有:
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'my_database_URI'
db = SQAlchemy(app)
db.createAll()
我需要使用user.py和projects.py中的db对象。如果我像这样导入它:
from start import db
如果我在两个模块中执行此操作,则会出现错误。如果我只将它导入到user.py,那么它可以正常工作。我得到的错误是" ImportError:无法导入名称db"。
有没有办法解决这个问题?
答案 0 :(得分:2)
听起来这是一个循环导入问题。
我解决这个问题的方法是在根目录中使用另一个文件shared.py
文件。在该文件中,创建数据库对象
from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy()
在start.py
中,不要创建新的db对象。相反,做
from shared import db
db.init_app(app)
在您想要使用db对象的任何地方,包括您的模型文件,从shared.py
导入它:
from shared import db
# do stuff with db
这样,共享文件中的对象将使用应用程序上下文进行初始化,并且无法进行循环导入。