数据库报错django.db.utils.InternalError怎么解决

网友投稿 424 2023-11-22

数据库报错django.db.utils.InternalError怎么解决

这篇“数据库报错django.db.utils.InternalError怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“数据库报错django.db.utils.InternalError怎么解决”文章吧。

数据库报错django.db.utils.InternalError怎么解决

代码

注意看:idc_name中的unique=True

class idc_list(models.Model):     city = models.CharField(max_length=32, verbose_name=城市,help_text="如:上海/烟台/洛阳/武汉,等城市名称")     idc_name = models.CharField(unique=True,max_length=32,verbose_name=IDC名称,help_text="城市名称+路名+运营商名称 如:上海-达秀路-万国")     cur_state = models.IntegerField(choices=status_choices, verbose_name=当前状态, default=1,help_text="是:表示在使用,否:表示已经停用")     update_time = models.DateTimeField(verbose_name=更新时间, auto_now=True)     remark = models.CharField(max_length=32,verbose_name=备注,null=True, blank=True)

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“的动作,此时就会提示你已经存在。

以上就是关于“数据库报错django.db.utils.InternalError怎么解决”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:mysql中RR与幻读的问题怎么解决
下一篇:Redis遍历键和数据库管理的方法是什么
相关文章

 发表评论

暂时没有评论,来抢沙发吧~