7.ORM与SQLAlchemy (3) - flask-migrate数据库迁移

在上一遍文章中,咱们增长了两个模型QuestionsComments,并为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()

首先导入相关的类,注意模型要所有导入过来,即便代码中并无显式地使用它们。而后传入appdb来构建ManagerMigrate两个类的实例,最后将MigrateCommand的命令加入到manager中。app


此时咱们假设要更新模型的结构,在models.pyUser模型结尾添加一行代码test = db.Column(db.Integer),而后点击PyCharm下方的Terminal,自动进入到了虚拟环境的命令行中,输入python manage.py db init来初始化,这一步主要是创建数据库迁移相关的文件和文件夹,只是在第一次须要使用。接着依次使用python manage.py db migratepython manage.py db upgrade,待运行完成,查看users_infor表的结构,结果以下:工具

clipboard.png

能够看到test字段已经添加到表中了。spa

相关文章
相关标签/搜索