gpt4 book ai didi

python - ImportError : cannot import name 'db'

转载 作者:行者123 更新时间:2023-12-03 09:54:50 28 4
gpt4 key购买 nike

enter image description here

我正在将 flask 管理添加到现有的 flask 锅炉板项目中。我已经能够在https://github.com/kc1/flask-base(SCREENSHOT)上运行基本项目。现在,我需要添加模型 View 以添加基本的CRUD功能。为此,我将代码更改为:

adm = Admin(app,name='flaskadmin')
from app.models import User
adm.add_view(ModelView(User, db.session))

enter image description here

您可以看到它有效。但是,如果我将User模型与其余的导入一起导入到app/init的顶部,则会得到:
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导入 user.py时,您基本上就是在导入 db.Model,这要求 db存在并且实际上包含数据。警惕Flask和Python中的 circular imports

错误跟踪明确指出了您收到的错误
  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中,从 db导入了 ../__init__.py,但是在该文件中,在 User的定义之前发生了 db的导入。
db对象模拟 declarative approach from SQLAlchemy,其中该对象保存从其继承的每个其他Class的数据。

关于python - ImportError : cannot import name 'db' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50308051/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com