Django迁移获取OperationalError

时间:2016-09-09 17:24:23

标签: django migrate

我是Django的新手,我使用的是1.10版本。我因为错误而无法迁移,因此使用./manage.py migrate myapp 0003_auto_20160426_2022备份到早期迁移并删除了以后的迁移文件。然后我修复了我的models.py并运行makemigrations,运行正常。但是当我尝试migrate时,我收到了以下错误(仅显示最后几行)

  

文件   " /Users/wahhab/Sites/rts/env/lib/python3.5/site-packages/MySQLdb/connections.py" ;,   第280行,在查询中   _mysql.connection.query(self,query)django.db.utils.OperationalError:(1022,"不能写;表中的重复键' #sql-72_4a6'&#34 ;)

我不知道如何从这一点前进,以便我可以继续我的项目。我在其他应用程序中有数据但到目前为止这个新应用程序中只有一点测试数据,所以我考虑删除此应用程序的所有迁移和MySQL表并重新开始,但我不想创建更糟糕的混乱比我有,并不知道是什么导致了这个错误。欢迎任何建议。谢谢!

1 个答案:

答案 0 :(得分:0)

好的,所以@raratiru已经提出了 hackish 解决方案。

现在您面临上述问题的为什么的解释是,当您删除迁移时,Django会重置其所有计数器,其中还包括<的计数器strong> key ,但由于删除迁移是手动迁移,数据仍然存在于您的数据库中。

因此,数据库中已经存在key = 1,2,3 ......等对象。但Django并不知道这一点,因此当你只删除了迁移而不是数据时,Django面临着密钥的冲突,因为Django再次开始从1中分配自动键值,这已经存在于数据库中。但由于需要唯一,因此会出错。

因此,如果同时删除迁移数据,则不会出现错误。