Skip to main content
 首页 » 编程设计

python之陷入 django 迁移 IntegrityError 循环 : can I delete those migrations that aren't yet in the db

2024年10月17日35langtianya

因此,我提交并推送了所有代码,然后成功部署了我的 Web 应用程序。然后,我向我的“家庭”应用程序添加了一个新模型,它(出于我现在理解的原因,但在这里无关紧要)创建了一个 IntegrityError (django.db.utils.IntegrityError: insert or update on table "foo" violates foreign key constraint "bar")。我跑了python manage.py makemigrations , python manage.py migrate ,这会导致 IntegrityError .

但是,即使我删除了所有新模型代码(这样 git status 什么也没有),IntegrityError 仍然会发生。如果我通过不同的 python 实例连接到我的数据库并下载 select * from django_migrations; , 最新的db migration: 0020 距离我最新的local home/migrations 有八个迁移迁移文件:0028。

--> 我的问题是:删除本地 0021-0028 迁移文件对我来说安全吗?这会解决我的问题吗?

请您参考如下方法:

如果您还没有将迁移应用到数据库,删除它们并重新创建它们是安全的。

您遇到此错误的可能原因是:

  1. 您删除了模型代码,但是当您运行 migrate 时,它会读取您的迁移文件(其中包含有关您已删除模型的信息)并尝试应用迁移操作。如果您在删除模型后没有运行 makemigrations 命令,迁移系统将无法检测到您的更改并认为您的模型仍然存在。
  2. 即使您在删除模型后运行了 makemigrations,您的迁移文件中仍会存在依赖性问题,因为新的迁移文件将依赖于旧文件(您曾经问题)

这就是为什么我们可以说删除它们是安全的,如果它们还没有应用,但同时你应该小心你的迁移依赖。

这documentation信息可能有用。