情景介绍
来到公司接收前辈们留下的代码,有点震惊到了那时候是比菜鸡还菜鸡的我
因为不同的人编写和维护不同的部分,而且没有统一的规章制度,甚至于很多数据表都是直接只用可视化工具添加,项目中部分数据库表的model都没有
orm映射与原生sql的混合使用,只有庞大且冗余配置文件,没有环境变量等等操作
唯一还好的是,公司给我这个新人安排的是新项目,数据表及接口文档统一交由一位前辈设计(吹爆大佬,人好,有耐心,技术好,还能把你提的问题讲的通俗易懂)
然后,我们就用到了Alembic,基于flask的flask_alembic,文档推荐看官方文档
首先最基本的安装,二者选其一皆可
pip install Flask-Alembic
pip install https://bitbucket.org/davidism/flask-alembic/get/tip.zip
安装好了后,需要配置到项目里面,找到flask实例对象,然后给予如下配置
alembic = Alembic()括号传参是可以控制生成的数据库迁移文件目录的位置的,默认会在配置的同级文件目录创建

楼主这里是在项目的启动文件中配置的alembic,随笔中会介绍为什么,大致图如下

在这么配置了之后呢,终端命令就新增了一条 python manage.py db 启动后会提示可执行语法
你可以使用revision xxx 生成一个数据迁移文件,其中xxx可以是这个迁移文件的描述(推荐英文)
然后同级目录会生成一个migrations文件目录,这个文件目录下面将会保存你的数据库迁移文件


这里是因为演示model表没改动所以迁移文件中没内容
当然,有可能你会发现,你明明创建了model,为什么这里的upgrade和downgrade都是空呢?
revision自动生成迁移文件的时候,是从导包中检测的,所以你需要找地方import一下你的model才可以。
然后使用downgrade或者upgrade对进行升级和降级等操作

downgrade默认降一级,upgrade默认升到最新
他们会严格按照数据库迁移文件中的标识进行升降级的顺序执行(假如想先跳过某一个升级,就可以修改标识符对应顺序)

然后 你的数据库中 会有一个数据表记录当前数据库对应的迁移文件的标识

然后大概就可以满足需求了
这里再来说一下关于数据库迁移文件的操作
可能,靠revision自动生成的迁移文件,已经可以满足大部分的需求,但是这里不得不提一点,自动迁移文件不适用所有情况
比如现在我要在已有订单数据的订单表中新增一个int类型的refund_price字段,如果是自动生成文件,会给之前的所有订单数据新增这个字段,但是字段值会是null(model里面的设置默认值只是在新创建的订单增加默认值,旧订单不会)
我们直接取这个值进行计算就会报错,所以我们可以稍作修改

上图大概意思是给order表新增一个refund_price字段,数据类型是Int,可以为空
创建refund_price字段对象,修改所有字段为null的改为0
这里主要是想表达,数据库迁移文件是可操作的,实质可以理解为存储的是sql语句,进行升降级的时候,执行对应的sql语句
类似枚举字段类型增加则更加复杂,就不一一赘述可以借鉴一下文档
大致就是这个样子的(最好保证统一迁移文件升级和降级的一致性)
以上