Alembic 数据库迁移工具-菜鸟日记

情景介绍

来到公司接收前辈们留下的代码,有点震惊到了那时候是比菜鸡还菜鸡的我

因为不同的人编写和维护不同的部分,而且没有统一的规章制度,甚至于很多数据表都是直接只用可视化工具添加,项目中部分数据库表的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语句

类似枚举字段类型增加则更加复杂,就不一一赘述可以借鉴一下文档

大致就是这个样子的(最好保证统一迁移文件升级和降级的一致性)

以上

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

友情链接更多精彩内容