ImportError:无法导入名称' db'

时间:2018-05-12 15:48:22

标签: python flask flask-admin

enter image description here

我正在努力将烧瓶管理器添加到预先存在的烧瓶锅炉板项目中。我已经能够在https://github.com/kc1/flask-base(SCREENSHOT)上完成基本项目。我现在需要添加模型视图以添加基本的CRUD功能。为此,我将代码更改为:

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

enter image description here

你可以看到它有效。但是如果我在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'

为什么?

1 个答案:

答案 0 :(得分:3)

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.pydb中有../__init__.py的导入,但在User定义db之前导致db导入}}。

function multiplier() { return { result1: 25 * 20, result2: 25 * 1 } }对象模拟declarative approach from SQLAlchemy,其中对象包含有关从其继承的每个其他类的数据。