数据库迁移扩展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) 版本号