django.db.utils.InternalError: (1061, "Duplicate key name(django多对多)
代码:
注意看:idc_name中的unique=True
(models.): city models.(max_length, verbose_name,help_text) idc_name models.(unique,max_length,verbose_name,help_text) cur_state models.(choicesstatus_choices, verbose_name, default,help_text) update_time models.(verbose_name, auto_now) remark models.(max_length,verbose_name,null, blank)
python manage.py migrate
时报错:
django.db.utils.InternalError: (1061, "Duplicate key name 'cmdb_idc_list_idc_name_8ce6f945_uniq'")
解决方案:
连接到数据库内把这个约束字段删除,保存,重新migrate
如果一次修改了models内的多个字段时报错的,需要同时删除数据库内的多个字段的unique后重新运行。
问题原因:
经过测试,发现django的migrate,不是事务性的,是逐个动作执行的。
也就是说如果后面的动作由于某种原因报错了,前面的动作会执行,我的这个"operations"如果在报错的动作前面,就会导致我这个动作执行完成,实际上数据库内已经存在了这条“约束”,等你修改好其他bug想再运行migrate时他会调用已经产生的”migrations 文件“,这个文件内有再次执行”unique“的动作,此时就会提示你已经存在。
版权声明
本文仅代表作者观点,不代表博信信息网立场。
上一篇:一文详解python生成器 下一篇:Python怎样实现周日历,转换为日期怎样做