flask-sqlalchemy: 导入模型出错

2 投票
1 回答
1949 浏览
提问于 2025-05-01 01:06

我正在用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时,出现了一个错误,提示“无法导入名称User”。我猜这里面有个循环导入的问题,但我不知道该怎么解决。

不过,如果我创建另一个文件run.py,里面只写了:

from app import app
app.run()

一切都能正常工作。但是,为什么这样就解决了循环导入的问题呢?我搞不懂。

暂无标签

1 个回答

4

你说得对:这是一个循环导入的问题。

我解决这个问题的方法是创建一个新的文件,叫做 shared.py,放在根目录下。在这个文件里,创建数据库对象,

from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy()

在你的 app/init.py 文件中,不要再创建一个新的数据库对象。相反,应该这样做:

from shared import db
db.init_app(app)

在任何需要使用数据库对象的地方,包括你的模型文件,从 shared.py 导入它:

from shared import db
# do stuff with db

这样,shared 文件中的对象就会在应用上下文中初始化,这样就不会出现循环导入的问题了。

撰写回答