【问题标题】:django - re-running migration that creates constraints and fails halfwaydjango - 重新运行创建约束并中途失败的迁移
【发布时间】:2020-01-08 06:06:57
【问题描述】:

我有一个添加了一堆unique_together 约束的迁移。当我执行它时,它中途失败,因为某些表不遵守此约束。所以我必须进去修复数据,然后再次运行迁移。

问题是当我尝试再次运行它时,它抱怨约束已经存在

django.db.utils.IntegrityError: (1062, "Duplicate entry '406-14933' for key 'app_model_language_id_category_id_29dac763_uniq'") 

这发生在上次运行没有问题的表中,因此创建了约束。然后我必须进去手动删除约束,然后我可以再次运行它。

有没有办法让它忽略这个错误并继续?

【问题讨论】:

  • 你在使用 MySQL 对吗?
  • @IainShelvington 是的
  • 你不能忽略这个错误,否则唯一约束不会是唯一的。您需要使用 RunPython 命令创建一个迁移,该命令删除有问题的行并在添加约束的行之前运行该迁移
  • 我无法进行迁移,因为数据合并是一个非常手动的过程。由于显然这个约束有一个唯一标识符(在这种情况下为 29dac763),我认为它可以被删除并创建或不再创建。

标签: django django-migrations


【解决方案1】:

我不确定您是否可以绕过此检查,因此解决此问题的方法不是创建一个创建许多约束并且可能中途失败的迁移,而是创建每个只有一个约束的多个迁移。然后,如果一个表是正确的,则创建约束,您可以转到下一个并且永远不会回到这个。

【讨论】:

    猜你喜欢
    • 2015-04-24
    • 2015-07-22
    • 2018-08-05
    • 2019-10-27
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 2020-10-27
    • 2021-09-07
    相关资源
    最近更新 更多