当前位置:  开发笔记 > 后端 > 正文

在Django迁移期间收到"ValueError:发现错误的数字(0)的约束"

如何解决《在Django迁移期间收到"ValueError:发现错误的数字(0)的约束"》经验,为你挑选了1个好方法。

在使用Django 1.7迁移时,我遇到了一个在开发中工作但不在生产中的迁移:

ValueError: Found wrong number (0) of constraints for table_name(a, b, c, d)

这是由一条AlterUniqueTogether规则引起的:

   migrations.AlterUniqueTogether(
         name='table_name',
         unique_together=set([('a', 'b')]),
   )

阅读Django bug DB中的bug等,它似乎unique_together与db中存在的不匹配迁移历史记录有关.

如何解决此错误并完成迁移?



1> rrauenza..:

(Postgres和MySQL答案)

如果您查看实际的表(使用\d table_name)并查看索引,您将找到唯一约束的条目.这就是Django试图找到和放弃的东西.但它无法找到完全匹配.

例如,

"table_name_...6cf2a9c6e98cbd0d_uniq" UNIQUE CONSTRAINT, btree (d, a, b, c)

在我的例子中,键的顺序与(d, a, b, c)它想要删除的约束不匹配(a, b, c, d).

我回到了我的迁移历史记录中并更改了原始数据AlterUniqueTogether以匹配数据库中的实际顺序.

然后迁移成功完成.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有