我有几个模块: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:无法导入名称数据库”。
有办法解决这个问题吗?
最佳答案
听起来这是一个循环导入问题。
我解决这个问题的方法是在根目录中添加另一个文件,即 shared.py
文件。在该文件中,创建数据库对象,
from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy()
在您的 start.py
中,不要创建新的数据库对象。相反,做
from shared import db
db.init_app(app)
在您想要使用 db 对象的任何位置(包括模型文件),从 shared.py
导入它:
from shared import db
# do stuff with db
这样,共享文件中的对象将使用应用程序上下文进行初始化,并且不会出现循环导入。
关于python - 无法在 Flask 和 sqlalchemy 中多次导入数据库对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26859155/