Ошибка целостности:(1062, “Дублирующая запись '3-add_author' для ключа 2”)

StackOverflow https://stackoverflow.com/questions/7384689

  •  29-10-2019
  •  | 
  •  

Вопрос

База данных - это MySQL.

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

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

manage.py dumpdata auth > my_auth.json --natural --исключить типы содержимого

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

Затем

manage.py загрузить данные my_auth.json

Я получил сообщение об ошибке:

Ошибка целостности:(1062, "Дублирующая запись '3-add_author' для ключа 2")

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

Мы будем очень признательны за любую помощь.Спасибо!

Это было полезно?

Решение

(Обновлено)

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top