ImportError: cannot import name 'db'
ImportError: cannot import name 'db'
我正在努力将 flask admin 添加到一个预先存在的 flask 样板项目中。我已经能够让基本项目在 https://github.com/kc1/flask-base 运行(屏幕截图)。我现在需要添加模型视图来添加基本的 CRUD 功能。为此,我将代码更改为:
adm = Admin(app,name='flaskadmin')
from app.models import User
adm.add_view(ModelView(User, db.session))
你可以看到它有效。但是如果我在 app/init 的顶部导入 User 模型和其余的导入,我得到:
Traceback (most recent call last):
File "...flask-base/manage.py", line 10, in <module>
from app import create_app, db
File "E:\ENVS\r3\flask-base\app\__init__.py", line 17, in <module>
from app.models import User
File "E:\ENVS\r3\flask-base\app\models\__init__.py", line 6, in <module>
from .user import * # noqa
File "E:\ENVS\r3\flask-base\app\models\user.py", line 7, in <module>
from .. import db, login_manager
ImportError: cannot import name 'db'
为什么?
User
是一个 Flask-SQLAlchemy
模型,它使用 SQLalchemy 的 API 包装模型。它从 db
对象继承其所有模型,我假设您正在 create_app
方法中实例化或注册该对象。
所以,你应该有这样的东西
db = SQLAlchemy()
def create_app(config):
app = Flask(__name__)
db.init_app(app)
adm = Admin(app,name='flaskadmin')
from app.models import User
adm.add_view(ModelView(User, db.session))
return app
每当您从 user.py
导入 User
时,您基本上是在导入 db.Model
,这需要 db
存在并实际包含数据。警惕 Flask 中的 和一般的 Python。
错误回溯中清楚地说明了您收到的错误
File "E:\ENVS\r3\flask-base\app\models\user.py", line 7, in <module>
from .. import db, login_manager
ImportError: cannot import name 'db'
这是,在 user.py
中从 ../__init__.py
导入了 db
,但在该文件中,在 User
的定义之前导入了 User
=14=]。
一个 db
对象模拟 declarative
approach from SQLAlchemy,其中该对象保存从它继承的所有其他 Class 的数据。
我正在努力将 flask admin 添加到一个预先存在的 flask 样板项目中。我已经能够让基本项目在 https://github.com/kc1/flask-base 运行(屏幕截图)。我现在需要添加模型视图来添加基本的 CRUD 功能。为此,我将代码更改为:
adm = Admin(app,name='flaskadmin')
from app.models import User
adm.add_view(ModelView(User, db.session))
你可以看到它有效。但是如果我在 app/init 的顶部导入 User 模型和其余的导入,我得到:
Traceback (most recent call last):
File "...flask-base/manage.py", line 10, in <module>
from app import create_app, db
File "E:\ENVS\r3\flask-base\app\__init__.py", line 17, in <module>
from app.models import User
File "E:\ENVS\r3\flask-base\app\models\__init__.py", line 6, in <module>
from .user import * # noqa
File "E:\ENVS\r3\flask-base\app\models\user.py", line 7, in <module>
from .. import db, login_manager
ImportError: cannot import name 'db'
为什么?
User
是一个 Flask-SQLAlchemy
模型,它使用 SQLalchemy 的 API 包装模型。它从 db
对象继承其所有模型,我假设您正在 create_app
方法中实例化或注册该对象。
所以,你应该有这样的东西
db = SQLAlchemy()
def create_app(config):
app = Flask(__name__)
db.init_app(app)
adm = Admin(app,name='flaskadmin')
from app.models import User
adm.add_view(ModelView(User, db.session))
return app
每当您从 user.py
导入 User
时,您基本上是在导入 db.Model
,这需要 db
存在并实际包含数据。警惕 Flask 中的
错误回溯中清楚地说明了您收到的错误
File "E:\ENVS\r3\flask-base\app\models\user.py", line 7, in <module>
from .. import db, login_manager
ImportError: cannot import name 'db'
这是,在 user.py
中从 ../__init__.py
导入了 db
,但在该文件中,在 User
的定义之前导入了 User
=14=]。
一个 db
对象模拟 declarative
approach from SQLAlchemy,其中该对象保存从它继承的所有其他 Class 的数据。