如题,我在学习《Flask Web开发:基于Python的Web应用开发实战》这本书第七章的时候,在shell中使用db.create_all()创建sqlite数据库。但是发现这个命令只能创建出sqlite文件,不能创建数据库table。(venv) FlaskStudy$ python manage.py shell
>>> from app import db
>>> db.create_all()几次尝试过后,发现如果在执行db.create_all()前导入我创建的数据库模型,就能正常的创建出表了:(venv) FlaskStudy$ python manage.py shell
>>> from app import db
>>> from app.models import User, Role
>>> db.create_all()或者在manage.py中导入数据库模型也可以:import osfrom app import create_app, db# 就是这一句from app.models import User, Rolefrom flask.ext.script import Manager, Shellfrom flask.ext.migrate import Migrate, MigrateCommandapp = create_app(os.getenv('FLASK_CONFIG') or 'default')manager = Manager(app)migrate = Migrate(app, db)manager.add_command('db', MigrateCommand)if __name__ == '__main__': manager.run()这是什么原理呢?求大神给讲解一下。
2 回答
慕标琳琳
TA贡献1830条经验 获得超9个赞
看 SQLAlchemy 的实现,可以看到 Model
是一个元类,在继承这个类来声明子类的时候,会把表模型注册到 sqlalchemy里,所以在 create_all
之前必须把模型的声明导入进来。
- 2 回答
- 0 关注
- 7242 浏览
添加回答
举报
0/150
提交
取消