python - 无法在 Flask 和 sqlalchemy 中多次导入数据库对象

标签 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:无法导入名称数据库”。

有办法解决这个问题吗?

最佳答案

听起来这是一个循环导入问题。

我解决这个问题的方法是在根目录中添加另一个文件,即 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/

相关文章:

python - 基于大量此类短语替换大文本文件中的短语的省时方法

python - 如何定制 Flask-Admin 模块的内联模型 View /表单?

python - 从服务运行时出现服务器内部服务器错误

mysql - 我怎样才能将中文(如我)更新到 mysql

Python SQLAlchemy flask 模式

python - 在 python 中创建垂直线的密度图

Python:如何在方括号内获取多个元素

python - 如何正确清理 Python 对象?

python - 如何从 Flask 中的不同蓝图调用方法?

python - Flask-SQLAlchemy - Backref 不起作用,值为 None