数据库是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.permission
是 populated 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/