Django 使用 squashmigrations 合并 migration 文件

问题:

有的时候我们对Django Models进行了某些修改会导致在新创建数据库时运行之前生成的 migration 文件报错

解决方案:

思路就是把原来的 migration 文件删除,重新生成,但要注意线上已有的环境中会记录已运行过的 migration,直接删除重新生成会导致原有环境 migrate 报错,这时候我们就要使用 squashmigrations,具体步骤如下:

  1. 运行 squashmigrations 命令合并现有的 migration 文件:
./manage.py squashmigrations backup 0001_initial 0016_auto_20190904_2035

会生成一个 0001_initial_squashed_0016_auto_20190904_2035.py 文件

  1. 注意直接这样合并之后生成的新 migration 文件直接运行依然可能会报错的,这时要把原来的 migration 文件全部删除(注意做好备份以防万一),重新运行 ./manage.py makemigrations backup 生成一个新的 0001_initial.py
  2. 将 0001_initial_squashed_0016_auto_20190904_2035 里面的 operations = [...] 这段代码替换成新 0001_initial 中的 operations
  3. 最后只保留新生成的 0001_initial_squashed_0016_auto_20190904_2035 文件就可以了,这个文件在新的环境中会运行,相当于运行了0001_initial,而在原有环境中会被略过,所以两边都不会报错

要注意的是被合并的migration文件要在原有环境中全部被运行过,通过数据库表中的 django_migrations 表可以查看到当前环境运行到了哪个 migration 文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值