什么情况下要用数据库迁移?
在开发过程中,需要修改数据库模型,而且还要在修改之后更新数据库。最直接的方式就是删除旧表,但这样会丢失数据。
更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化,然后把变动应用到数据库中。
数据库迁移命令,Flask-Migrate提供了一个MigrateCommand类,可以附加到flask-script的manager对象上。
安装方法: pip install flask-migrate
from flask import Flask # 导入flask包
from config import dict_config # 导入配置文件的类
from flask_script import Manager # 导入flask-script包
from flask_migrate import Migrate,MigrateCommand # 导入flask-migrate包
app = Flask(__name__) # 实例化flask对象
app.config.from_object(dict_config['config']) # 配置文件封装了正式模式、测试模式等各种模式的类,以字典的方式存储,这是通过键值对的方式选择要用的模式的类
manage = Manager(app) # manager实例化对象
migrate = Migrate(app,db) # 第一个参数是flask的实例,第二个参数是sqlalchemy数据库实例
manage.add_command('db',MigrateCommand) # manager是flask—script的实例,这条语句在flask-script中添加一个db命令
if __name__ == '__main__':
manage.run() # flask-script可以通过manager对象启动服务
# app.run()
数据库迁移命令:
在terminal命令窗口下执行:
1、 python database.py db init # 这个命令会创建migration文件夹,所有迁移文件都放在里面
2、 python database.py db migrate -m 'initial migration' # 创建迁移脚本,-m后面跟的是此次数据库迁移的备注
3、 python database.py db upgrade # 更新数据库
数据库更新成功后,在数据库中自动创建一个名为‘alembic_version‘的版本表,此时数据库迁移成功
返回以前的版本:
可以根据history命令找到版本号,然后传给downgrade命令
python database.py db history
输出格式:<base> -> 版本号 (head), initial migration
回滚到指定版本:
python database.py db downgrade 版本号