无法在flask和sqlalchemy中多次导入db对象

时间:2014-11-11 06:46:43

标签: python flask flask-sqlalchemy

我有几个模块: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"。

有没有办法解决这个问题?

1 个答案:

答案 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

这样,共享文件中的对象将使用应用程序上下文进行初始化,并且无法进行循环导入。