Flask-Migrate数据库迁移

数据库迁移扩展Flask-Migrate
  • 什么是数据库的迁移
    • 在开发过程中,需要修改数据库模型,而且还要在修改之后更新数据库。最直接的方式就是删除旧表,但这样会丢失数据。
    • 更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化,然后把变动应用到数据库中。
  • Flask-Migrate拓展
    • 在Flask中可以使用Flask-Migrate扩展,来实现数据迁移。并且集成到Flask-Script中,所有操作通过命令就能完成。
    • 为了导出数据库迁移命令,Flask-Migrate提供了一个MigrateCommand类,可以附加到flask-script的manager对象上。
使用Flask-migrate的步骤
  • 前提
    • 已经通过Alchemy拓展创建了数据库表的类
  • 安装拓展
    • pip install flask-migrate
  • 通过Flask-Script注册迁移命令
    • from flask import Flask
    • from flask_script import import Manager
    • from flask_sqlalchemy import SQLAlchemy
    • from flask_migrate import Migrate, MigrateCommand
    • app = Flask(__name__)
    • db = SQLAlchemy(app)
    • manager = Manager(app)
    • Migrate(app, db, 'migrate_dir')            关联迁移,将app和数据库的操作对象传入
      • migrate_dir 为迁移文件存储的文件夹,默认为migrates
    • manager.add_comment('db', MigrateCommand)          注册迁移命令到Flask-Script
      • 第一个参数是,在命令行中通过它来使用迁移相关命令
  • 初始化迁移,创建迁移仓库(创建migrations文件夹,所有迁移文件都放在里面)
    • 初始化迁移命令
      • python  database.py  db  init 
  • 生成迁移文件(每次对数据库模型类的修改都需要重新迁移)
    • 生成迁移文件命令
      • python  database.py  db  migrate  -m  'initial migration'
        • -m : 表示对迁移版本的 
    • 生成迁移的结果:
      • 自动创建一个迁移脚本包含两个函数,根据模型定义和数据库当前状态的差异,生成upgrade()和downgrade()函数
      • 两个函数操作内容不一定完全正确,有可能会遗漏一些细节,需要进行检查,自行进行改动
      • upgrade():函数把迁移中的数据库的改动同步到数据库中
      • downgrade():函数将upgrade()的改动回滚删除
  • 更新数据库表
    • python  database.py  db  upgrade
  • 查看历史迁移记录
    • python app.py db history
  • 回滚到指定版本
    • python app.py db downgrade 指定版本号

实际使用的操作顺序-总结
  • 1.python 文件 db init
  • 2.python 文件 db migrate -m"版本名(注释)"
  • 3.python 文件 db upgrade 然后观察表结构
  • 4.根据需求修改模型
  • 5.python 文件 db migrate -m"新版本名(注释)"
  • 6.python 文件 db upgrade 然后观察表结构
  • 7.若返回版本,则利用 python 文件 db history查看版本号
  • 8.python 文件 db downgrade(upgrade) 版本号


刘小恺(Kyle) wechat
如有疑问可联系博主