在上一遍文章中,咱们增长了两个模型Questions
和Comments
,并为Users
增长了avatar_path
这个字段,而后经过这段代码更新到数据库:python
with app.test_request_context(): db.drop_all() db.create_all()
由于当使用过db.create_all()
以后,再次直接使用db.create_all()
,对模型的修改并不会更新到数据库,咱们要使用db.drop_all()
先把数据库中全部的表先删除掉,而后再db.create_all()
一次。听上去是否是很麻烦?更糟糕的是,原先数据库的的数据也就没有了。因此咱们不用这种简单粗暴的方式去更新数据库结构,而是借助flask-migrate
这个专门用于迁移数据库的工具,它能够在保留数据库原始数据的状况下,完成模型的更新。此外,咱们还将结合flask-script
一块儿使用,简单来讲flask-script
让咱们可使用命令行去完成数据库迁移的操做。数据库
在项目主文件夹下新建一个manage.py
,代码以下:flask
from flask_script import Manager from flask_migrate import Migrate, MigrateCommand from HarpQA import app, db from models import Users, Questions, Comments manager = Manager(app) migrate = Migrate(app, db) manager.add_command('db', MigrateCommand) if __name__ == '__main__': manager.run()
首先导入相关的类,注意模型要所有导入过来,即便代码中并无显式地使用它们。而后传入app
或db
来构建Manager
和Migrate
两个类的实例,最后将MigrateCommand
的命令加入到manager
中。app
此时咱们假设要更新模型的结构,在models.py
的User
模型结尾添加一行代码test = db.Column(db.Integer)
,而后点击PyCharm下方的Terminal,自动进入到了虚拟环境的命令行中,输入python manage.py db init
来初始化,这一步主要是创建数据库迁移相关的文件和文件夹,只是在第一次须要使用。接着依次使用python manage.py db migrate
和python manage.py db upgrade
,待运行完成,查看users_infor
表的结构,结果以下:工具
能够看到test
字段已经添加到表中了。spa