2014-02-09 3 views
4

Я создал приспособление:Джанго: не LoadData работает

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

Я опустели все мои базы данных с помощью:

python manage.py sqlflush | psql mydatabase -U mydbuser 

Но когда я пытаюсь использовать LoadData:

python manage.py loaddata ./mydump.json 

I Получая эту ошибку:

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 в стеке, обязательно остановите этот веб-сервер. –

ответ

2

Джеффа Шеффилда правильно, но теперь я считаю, что решение, как django-dbbackup на сегодняшний день является наиболее универсальным и проще способ сделать это с любой базой данных.

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. 

Отредактировано: (очень важно) Убедитесь, что у вас нет каких-либо активных соединений Джанго, запущенными на вашем сервере. Тогда:

$ 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. 
Смежные вопросы