Django:loaddata无法正常工作

时间:2014-02-09 02:41:40

标签: python django dump fixtures dumpdata

我生成了一个灯具:

python manage.py dumpdata --all > ./mydump.json

我使用以下方法清空了所有数据库:

python manage.py sqlflush | psql mydatabase -U mydbuser

但是当我尝试使用loaddata时:

python manage.py loaddata ./mydump.json

我收到了这个错误:

IntegrityError: Could not load tastypie.ApiKey(pk=1): duplicate key 
value violates unique constraint "tastypie_apikey_user_id_key" 
DETAIL:  Key (user_id)=(2) already exists.

我在制作上遇到了这个问题而且我没有想法。有人有类似的问题吗?

3 个答案:

答案 0 :(得分:6)

<强>首先: 我相信你的unix管道写得不正确。

# 1: Dump your json
$ python manage.py dumpdata --all > ./mydump.json

# 2: dump your schema
$ python manage.py sqlflush > schema.sql

# 3: launch psql
# this is how I launch psql ( seems to be more portable between rhel/ubuntu )
# you might use a bit different technique, and that is ok.

编辑:(非常重要)     确保您的服务器上没有运行任何活动的django连接。然后:

$ sudo -u myuser psql mydatabase

# 4: read in schema
mydatabase=# \i schema.sql
mydatabase=# ctrl-d

# 5: load back in your fixture. 
$ python manage.py loaddata ./mydump.json

<强>第二 如果你的管道好了..它可能是。根据您的架构/数据,您可能需要使用自然键。

# 1: Dump your json using ( -n ) natural keys.
$ python manage.py dumpdata -n --all > ./mydump.json

# followed by steps 2-5 above.

答案 1 :(得分:5)

运行loaddata并注释掉所有@reciever,因为它们将在loaddata加载数据时被触发。如果@reciever创建其他对象作为副作用,则会导致冲突。

答案 2 :(得分:2)

杰夫谢菲尔德的解决方案是正确的,但现在我发现像django-dbbackup这样的解决方案是迄今为止用于任何数据库的最通用和最简单的方法。

python manage.py dbbackup