flask-migrate库的使用

在使用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文档了解更多用法和自定义选项

posted @ 2019-01-13 17:11  守功  阅读(600)  评论(0编辑  收藏  举报