IntegrityError: (1062, «Дублирующая запись« 3-add_author »для ключа 2») - PullRequest
3 голосов
/ 12 сентября 2011

База данных MySQL.

Я использую django.contrib.auth.

Вот вся информация:

manage.py dumpdata auth> my_auth.json --natural --exclude contenttypes

Затем я удалил всю базу данных (удалите базу данных my_database) и создал новую базу данных (создайте базу данных new_database) (используйте ./manage.py syncdb для создания всех таблиц).

Тогда

manage.py loaddata my_auth.json

Я получил ошибку:

IntegrityError: (1062, "Дублирующая запись '3-add_author' для ключа 2")

В чем проблема?

Любая помощь будет принята с благодарностью. Спасибо!

1 Ответ

4 голосов
/ 12 сентября 2011

(обновлено)

Вы правы (см. Ваши комментарии ниже). Проблема действительно с auth.permission.

При запуске syncdb, auth.permission равен , заполняется автоматически значениями по умолчанию для всех установленных моделей . При любых последующих запусках syncdb будут добавляться новые записи для всех недавно добавленных моделей.

Если на более позднем этапе вы сбрасываете базу данных и снова запускаете syncdb, значения будут повторно заполнены, и в зависимости от порядка проверки установленных моделей соответствующие разрешения могут быть добавлены в другом порядке, давая ему другие идентификаторы. из вашей предыдущей базы данных (если модели были установлены поэтапно).

Чтобы избежать этой проблемы, вы можете либо пропустить auth.permission при выводе данных auth (как вы уже указали в комментариях), либо сбросить таблицу auth.permission перед загрузкой дампа данных.

Кроме того, важно использовать естественные ключи (--natural) при выгрузке данных, чтобы они не ссылались на связанные данные, используя целочисленный идентификатор (который может не совпадать при загрузке в другой БД). Эта функция была введена в Django 1.2 .

...