2014-02-09 33 views
4

我产生一个夹具:Django的:loaddata不工作

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. 

我在生产上遇到了这个问题,而且我的想法不多。有人有类似的问题?

+0

我修改了我的答案,指出在尝试加载新数据之前需要确保django已停止。即如果您正在堆栈中运行带有django的Web服务器,请确保停止该Web服务器。 –

回答

2

杰夫·谢菲尔德的解答是正确的,但现在我发现,像django-dbbackup的解决方案是目前最通用的,simplier方式与任何数据库做到这一点。

python manage.py dbbackup 
5

第一张: 我相信你的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.