flask-migrate数据迁移后再中途部署的同步方案

本文详细介绍了使用Flask-Migrate进行数据库迁移的最佳实践,尤其是在多服务器环境下的正确操作流程,避免了因数据库版本不一致导致的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2019年3月7日更新:

实际上,我在之后查阅资料得知,比较好的方案是在所部署服务器进行数据库迁移,而不是在开发环境(也就是写代码的地方)进行数据库迁移。如果在所部署服务器进行数据库迁移,那么无论model代码怎么改,中途再部署的服务器都不会受影响,因为数据库迁移脚本随是和部署服务器放在一起的,而不是和开发源码放在一起。

当然如果所部署服务器没法操作,那就只能在本地先迁移好在上传到部署服务器了。


使用flask-migrate对flask web app进行数据库迁移非常方便,通常的迁移步骤如下:

  1. 开发完flask web app;

  2. 部署flask web app到服务器;

  3. 发现需要修改数据库,于是使用flask-migrate进行数据库迁移;

    flask db init
    flask db migrate
    flask db upgrade
    
  4. 服务器的app更新代码,并进行更新

    flask db upgrade
    

以上步骤是正确的,但是想象那么一个场景:

  1. 数据库迁移后,突然需要再另一台新的服务器部署flask web app;

  2. 假设我们在新服务器使用 flask initdb 初始化数据库,此时新服务器的数据库对应的model是最新的数据表;

  3. 对新服务器的 flask web app 使用下面命令

    flask db upgrade
    

就会出错。因为新数据库没有记录数据库迁移到了哪一个版本,所以数据库迁移是从第一条记录开始,于是对已经存在的数据表字段进行修改,最后就报错了。

那么怎样解决这个问题呢?使用下面命令把当前数据库版本标记进去即可。

flask db stamp <revision>

<revision>是数据库迁移的版本,我们可以使用下面命令查看:

flask db heads   # 显示最后一次数据库迁移版本(?),heads应该类似于git的head
# OR
# flask db current # 显示当前数据库迁移版本

因此,在新服务器上我们只需要执行以下两条命令,即可对新服务器的flask web app标记上当前数据库迁移的版本,示例如下:

$ flask db heads
d74d475e2a58 (head)
$ flask db stamp d74d475e2a58

操作完成之后,再次执行 flask db upgrade 试试看,已经不会报错了,因为新服务器的数据库是最新版本了。新服务器的数据库也可以愉快地继续后续数据库迁移了。

最后,可以对比下新旧服务器的数据库中,alembic_version表的内容。数据迁移版本号是一致的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值