IntegrityError:(1062,“密钥 2 的重复条目 '3-add_author'”)
Posted
技术标签:
【中文标题】IntegrityError:(1062,“密钥 2 的重复条目 \'3-add_author\'”)【英文标题】:IntegrityError: (1062, "Duplicate entry '3-add_author' for key 2")IntegrityError:(1062,“密钥 2 的重复条目 '3-add_author'”) 【发布时间】:2011-11-15 03:05:22 【问题描述】:数据库是 mysql。
我使用 django.contrib.auth。
这里是所有信息:
manage.py dumpdata auth > my_auth.json --natural --exclude contenttypes
然后我删除了整个数据库(drop database my_database),并创建了一个新数据库(create database new_database)(使用./manage.py syncdb创建所有表)。
然后
manage.py 加载数据 my_auth.json
我遇到了一个错误:
IntegrityError: (1062, "Duplicate entry '3-add_author' for key 2")
有什么问题?
任何帮助将不胜感激。谢谢!
【问题讨论】:
【参考方案1】:(更新)
你是对的(下面是你的 cmets)。问题确实出在auth.permission
。
当您运行 syncdb
时,auth.permission
是 populated automatically with default values for all installed models。 syncdb
的任何后续运行都会为最近添加的任何模型添加新条目。
如果在稍后阶段您重置数据库并再次运行syncdb
,这些值将被重新填充,并且根据检查已安装模型的顺序,相关权限可能会以不同的顺序添加,并赋予不同的 ID来自您之前的数据库(如果模型是分阶段安装的)。
为避免此问题,您可以在转储auth
数据时将auth.permission
排除在外(正如您在 cmets 中已经指出的那样),或者在加载数据转储之前重置auth.permission
表。
此外,在转储数据时使用natural keys (--natural
) 也很重要,这样它就不会使用其整数 id 引用相关数据(在另一个数据库中加载时可能不一样)。这个功能是introduced in Django 1.2。
【讨论】:
数据库中不存在条目。我删除了旧数据库,并创建了一个新数据库(一个空数据库)。我可以以同样的方式为我的另一个应用成功转储和加载。 @Yuanzhong 您应该使用该信息更新您的问题。您在问题中提到的只是dumpdata
,然后是loaddata
,这肯定会导致IntegrityError
。
顺便问一下,您删除了哪些表以及如何创建新表?使用./manage.py syncdb
?
对不起,我已经添加了更多信息。我删除了整个数据库并创建了一个新数据库。使用 ./manage.py syncdb 创建所有表。然后加载数据。
我知道问题的原因。 auth.permission(add_author) 的“pk”在 old_database 和 new_database 之间是不同的(使用 manage.py syncdb 创建 auth.permission 表)。(有关详细信息,请参阅i.stack.imgur.com/PtxDu.jpg)但我不知道它们为什么不同。现在我向 dumpdata 添加一个选项“--exclude auth.permission”: > manage.py dumpdata auth > my_auth.json --natural --exclude contenttypes --exclude auth.permission 当我加载它时它工作。感谢您的回答。以上是关于IntegrityError:(1062,“密钥 2 的重复条目 '3-add_author'”)的主要内容,如果未能解决你的问题,请参考以下文章
mysql IntegrityError: (pymysql.err.IntegrityError) (1062, "Duplicate entry '000001.SZ-2018-
mysql插入数据报错IntegrityError: (1062, "Duplicate entry 'xx' for key 'xxxxx'")
pymysql.err.IntegrityError: (1062, "Duplicate entry 'roxml-ROXML' for key 'PRIMARY&
使用用户名 = 电子邮件保存用户时出现 IntegrityError