IntegrityError: (1062, "Дублирующая запись" 3-add_author "для ключа 2")
База данных 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 ответ
(Обновлено)
Вы правы (см. Ваши комментарии ниже). Проблема действительно с auth.permission
,
Когда ты бежишь syncdb
, auth.permission
автоматически заполняется значениями по умолчанию для всех установленных моделей. Любые последующие прогоны syncdb
добавит новые записи для любых моделей, которые были недавно добавлены.
Если на более позднем этапе вы сбросите базу данных и запустите syncdb
опять же, значения будут повторно заполнены, и в зависимости от порядка, в котором проверяются установленные модели, связанные разрешения могут добавляться в другом порядке, давая ему отличные идентификаторы от вашей предыдущей базы данных (если модели были установлены поэтапно).
Чтобы избежать этой проблемы, вы можете оставить auth.permission
при сбросе auth
данные (как вы уже указали в ваших комментариях), или сброс auth.permission
таблица перед загрузкой вашего дампа данных.
Также важно использовать натуральные ключи (--natural
) при выгрузке ваших данных, чтобы они не ссылались на связанные данные с помощью целочисленного идентификатора (который может не совпадать при загрузке в другой БД). Эта функция была введена в Django 1.2.