从较低模块导入时的ImportError

phn*_*aye 2 python flask python-2.7

我正在尝试db在我的Flask项目的模块中导入一个名为(SQLAlchemy对象)的对象,以便在我的models(models.py)中使用SQLAlchemy .假设我的包已命名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
Run Code Online (Sandbox Code Playgroud)

phn*_*aye 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)
Run Code Online (Sandbox Code Playgroud)

还有我的views.py

from kuchiyose.dashboard import models
Run Code Online (Sandbox Code Playgroud)


rnr*_*kez 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)
Run Code Online (Sandbox Code Playgroud)