django - IntegrityError : (1062, "Duplicate entry ' 3-add_author' for key 2")

标签 django loaddata dumpdata

数据库是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 loaddata my_auth.json

我遇到了一个错误:

IntegrityError: (1062, "Duplicate entry '3-add_author' for key 2")

有什么问题?

任何帮助将不胜感激。谢谢!

最佳答案

(更新)

你是对的(请在下面回复你的评论)。问题确实出在 auth.permission 上。

当您运行 syncdb 时,auth.permissionpopulated automatically with default values for all installed models . syncdb 的任何后续运行都将为最近添加的任何模型添加新条目。

如果在稍后阶段您重置数据库并再次运行 syncdb,这些值将被重新填充,并且根据检查已安装模型的顺序,相关权限可能会添加到不同的位置order 为它提供与您以前的数据库不同的 ID(如果模型是分阶段安装的)。

为避免此问题,您可以在转储您的 auth 数据时将 auth.permission 排除在外(正如您已经在评论中指出的那样),或者重新设置加载数据转储之前的 auth.permission 表。

此外,使用 natural keys 也很重要(--natural) 转储数据时,这样它就不会使用其整数 id 引用相关数据(在另一个数据库中加载时可能不相同)。此功能是 introduced in Django 1.2 .

关于django - IntegrityError : (1062, "Duplicate entry ' 3-add_author' for key 2"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7384689/

相关文章:

python - 如何从应用程序文件夹导入 url

webview 中的 Android youtube

mysql - Django 2.0 SQLite3 到 MySQL 加载数据错误 : "The database backend does not accept 0 as a value for AutoField."

iphone - 图片加载到 UIWebView 时无法放大缩小

Django 转储数据 UTF-8 (Unicode)

django - 如何在嵌套文件夹结构中引用我的模型以在 Django 3.2 中转储数据?

django - 应用程序不会出现在 django admin 中

python Django : join view on the admin interface

Django GROUP BY 包括不必要的列?

Android:如何在将数据加载到 WebView 时显示进度条?