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.

Другие вопросы по тегам