Джанго мигрирует, получая OperationalError
Я довольно новичок в Django, я использую версию 1.10. Я достиг точки, когда мне не удалось выполнить миграцию из-за ошибки, и я выполнил резервное копирование на более раннюю миграцию, используя ./manage.py migrate myapp 0003_auto_20160426_2022
и удалил более поздние файлы миграции. Затем я починил models.py
и побежал makemigrations
, который работал нормально. Но когда я попытался migrate
Я получил следующую ошибку (показываются только последние несколько строк)
Файл "/Users/wahhab/Sites/rts/env/lib/python3.5/site-packages/MySQLdb/connections.py", строка 280, в запросе _mysql.connection.query(self, query) django.db.utils.OperationalError: (1022, "Невозможно записать; дубликат ключа в таблице '#sql-72_4a6'")
Я не знаю, как двигаться дальше с этой точки, чтобы я мог продолжить работу над своим проектом. У меня есть данные в других приложениях, но пока только небольшое количество тестовых данных в этом новом приложении, поэтому я рассмотрел удаление всех миграций и таблиц MySQL для этого приложения и начало заново, но я не хочу создавать худший беспорядок, чем я иметь и не знаю, что является причиной этой ошибки. Любой совет приветствуется. Спасибо!
1 ответ
Итак, @raratiru уже предложило хакерское решение.
Теперь объяснение, ПОЧЕМУ вы столкнулись с вышеуказанной проблемой, заключается в том, что когда вы удаляли свои миграции, Django сбрасывает все свои счетчики, которые также включают счетчик ключа, но поскольку удаление миграций было ручным, данные по-прежнему сохраняются в ваша БД.
Таким образом, в вашей БД уже есть объекты с ключом = 1, 2, 3 .... и так далее. Но Django этого не знает, и поэтому, когда вы удалили только миграции, а не данные, Django сталкивается со столкновением ключей, так как Django снова начинает присваивать значения автоматического ключа от 1, который уже существует в БД. Но так как ключ должен быть уникальным, он выдает ошибку.
Следовательно, если вы удалите и миграции, и данные, вы не получите ошибку.