在使用flask-SQLAlchemy库的时候,经常苦恼于该库的creat_all()方法不能对项目中的新建库进行修改,drop_all()又会对数据进行删除,这非常的不方便,万幸,Flask-SQLAlchemy的开发者同时开发了flask-migrate库,用于数据库的迁移。本文为windows环境。
安装
pip install flask-migrate
通过pip安装,就能完成。
使用方法
在进行迁移操作以前,我们需要现在程序中进行初始化操作:
from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_script import Manager from flask_migrate import Migrate app = Flask(__name__) ... db = SQLAlchemy(app) migrate = Migrate(app, db)
实例化Migrate类,除了要传入程序实例app,还需要传入实例化Flask-SQLAlchemy提供的SQLAlchemy类创建的db对象作为第二个参数。然后就可以开始数据库迁移操作了。
step1:创建迁移环境
flask db init
如果显示无该指令,可以使用:
python -m flask db init
通过这种方式,就可以在本地项目的根目录下创建一个migrations文件夹,该文件夹中包含了自动生成的配置文件和迁移脚本文件夹。ps:python -m是python中用来执行外部命令的方式,本文下面部分的内容如果出现相同情况,都可以通过添加该语句来解决。migrations文件夹如下所示:
step2:生成迁移脚本
使用migrate子命令可以自动生成迁移脚本
如果你在项目中添加了多个表,那么使用如下命令生成迁移脚本:
flask db migrate
执行这条命令以后,Alembic会检测出数据库及模型的变化,如下所示:
如果你只是单一的数据表发生字段的添加,那么你只需要这样:
flask db migrate -m "add 表名 字段名"
这种方式,可以实现对单一数据库表字段的添加操作,结果与上述方法类似,就不添加图片了。
step3:★更新数据库
这一步很关键,如果说,step2虽然检测到了数据库的变化,但是,并没有对原数据库进行任何改变,这还需要对数据库的更新操作,有点儿类似于项目中对数据库的增删改,可以保证数据库的一致性。
flask db upgrade
通过该指令,就可以实现数据库中未创建库和表的创建;如果已经创建了,则会在不损坏数据的前提下执行更新。结果如下所示:
以上就完成了对数据库迁移操作的简单介绍,非常的方便。
附上Alembic文档了解更多用法和自定义选项。