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

查看:736
本文介绍了python - Flask中使用flask-sqlalchemy时db.create_all()无法创建表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

如题,我在学习《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 os
from app import create_app, db
# 就是这一句
from app.models import User, Role
from flask.ext.script import Manager, Shell
from flask.ext.migrate import Migrate, MigrateCommand

app = 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()

这是什么原理呢?求大神给讲解一下。

解决方案

SQLAlchemy 的实现,可以看到 Model 是一个元类,在继承这个类来声明子类的时候,会把表模型注册到 sqlalchemy 里,所以在 create_all 之前必须把模型的声明导入进来。

这篇关于python - Flask中使用flask-sqlalchemy时db.create_all()无法创建表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆