我正在尝试在我的Flask项目的模块中导入名为db
(SQLAlchemy对象)的对象,以便在我的模型中使用SQLAlchemy(models.py
)。假设我的包名为Foo
并且在db
文件中包含__init__.py
对象,当我尝试执行from Foo import db
时,我收到以下错误:
ImportError: cannot import name db
我正在使用Flask Blueprint将我的项目分配到两个应用程序(仪表板和前端),每个应用程序都包含一个__init__.py
文件。只有models.py
抛出了这个错误,我的视图文件中有一些导入(导入登录管理器),一切顺利。
知道它可能是什么?
更新:追溯
Traceback (most recent call last):
File "run.py", line 4, in <module>
from kuchiyose import app
File "/path_to_project/kuchiyose/kuchiyose/__init__.py", line 60, in <module>
from kuchiyose import dashboard, frontend
File "/path_to_project/kuchiyose/kuchiyose/dashboard/__init__.py", line 10, in <module>
from dashboard import views
File "/path_to_project/kuchiyose/kuchiyose/dashboard/__init__.py", line 10, in <module>
from dashboard import views
File "/path_to_project/kuchiyose/kuchiyose/dashboard/views.py", line 8, in <module>
from kuchiyose.dashboard.models import User
File "/path_to_project/kuchiyose/kuchiyose/dashboard/models.py", line 3, in <module>
from kuchiyose import db
ImportError: cannot import name db
答案 0 :(得分:6)
首先,感谢您的帮助。关于我的第二个问题:“如何在没有循环导入问题的情况下将Flask模型导入视图(使用SQLAlchemy时)”,我找到了一个解决方案。它包括将SQLAlchemy对象设置为不在应用程序__init__.py
文件中,而是设置在models.py
文件本身中。有了它,您可以毫无问题地将其导入views.py
文件中。
我的models.py文件,现在:
from kuchiyose import app
from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy(app)
我的views.py
from kuchiyose.dashboard import models
答案 1 :(得分:6)
这是旧的,但在我的搜索中显示为最佳结果。
我有一个项目在几个不同的地方有模型声明,而不是统一的models.py文件,所以这个解决方案不太理想。我发现在建立db对象后也可以导入你的视图。
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config.from_object('config')
db = SQLAlchemy(app)
# Now Register routes
# db is now defined so app import db will now work)
from routes.user import user as user_routes
app.register_blueprint(user_routes)
答案 2 :(得分:4)
似乎有循环导入:
kuchiyose/__init__.py
从kuchiyose.dashboard.views
kuchiyose/dashboard/views.py
从kuchiyose.dashboard.models
kuchiyose/dashboard/models.py
从kuchiyose
参见例如Circular (or cyclic) imports in Python了解更多信息...