为了账号安全,请及时绑定邮箱和手机立即绑定

Flask中使用flask-sqlalchemy时db.create_all()无法创建表

Flask中使用flask-sqlalchemy时db.create_all()无法创建表

12345678_0001 2018-10-05 17:11:36
如题,我在学习《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 之前必须把模型的声明导入进来。

查看完整回答
反对 回复 2018-10-21
  • 2 回答
  • 0 关注
  • 7093 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信