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

ActiveStorage::IntegrityError 何时引发?

IntegrityError:删除时违反外键