在程序开发过程中,我们难以避免会对数据库表结构进行修改,而每一次修改,都可能会影响到已经完成的程序,很多语言中都有数据库迁移的概念,数据库迁移可以用增量式的来帮助我们完成数据库更新,极大的方便我们的开发。
Flask-Migrate是一个Flask扩展,用于处理数据库迁移。Flask-Script也是一个Flask扩展,用于提供自定义的运行脚本。一般情况下,Flask-Migrate结合Flask-Script使用,让数据库操作可以通过命令行方式来执行。
pip install Flask-Migrate
将Flask-Migrate加入Flask项目中
# manager.py文件
import MyApp
from flask_script import Manager
# 导入 Flask-Migrate 中的 Migrate 和 MigrateCommand
# 这两个东西说白了就是想在 Flask-Script 中添加几个命令和指令而已
from flask_migrate import Migrate,MigrateCommand
app = MyApp.create_app()
# 让app支持 Manager
manager = Manager(app) # type:Manager
# Migrate 既然是数据库迁移,那么就得告诉他数据库在哪里, 并且告诉他要支持那个app
Migrate(app,MyApp.db)
# 现在就要告诉manager 有新的指令了,这个新指令在MigrateCommand 中存着呢
manager.add_command("db",MigrateCommand) # 当你的命令中出现 db 指令,则去MigrateCommand中寻找对应关系
@manager.command
def func(arg):
print(arg)
@manager.option("-n","--name",dest="name")
@manager.option("-s","--url",dest="url")
def talk(name,url):
print(name)
print(url)
if __name__ == '__main__':
# 替换原有的app.run()
manager.run()
执行数据库迁移指令
1. 使用init 子命令创建迁移仓库, 会创建migrations 文件夹,所有迁移脚本都存放其中。
python manager.py db init
2. 创建迁移脚本, 如同 Django 中的 makemigration
python manager.py db migrate
3. 更新数据库, 如同 Django 中的 migrate
python manager.py db upgrade