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

65次阅读
没有评论

共计 1259 个字符,预计需要花费 4 分钟才能阅读完成。

行业资讯    
数据库    
数据库报错 django.db.utils.InternalError 怎么解决

这篇“数据库报错 django.db.utils.InternalError 怎么解决”文章的知识点大部分人都不太理解,所以丸趣 TV 小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“数据库报错 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 怎么解决”这篇文章的内容,相信大家都有了一定的了解,希望丸趣 TV 小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-13发表,共计1259字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)