Надоедливая "таблица 'my_table' уже существует" в Джанго-Юг - PullRequest
6 голосов
/ 12 марта 2011

В Джанго-Юг: Я изменил, я успешно выполнил начальную миграцию для myapp, но по какой-то причине, после того как я внес изменение в свою модель и перешел на

./manage.py schemamigration myapp --auto
./manage.py migrate myapp

И я получаю много следов, которые заканчиваются на:

(1050, "Table 'my_table' already exists")

После долгих поисков я нашел и попробовал:

./manage.py migrate myapp --fake

А потом я приступаю к его миграции, но безрезультатно; та же ошибка.

Есть предложения?

Ответы [ 3 ]

7 голосов
/ 01 сентября 2011

Я только что получил эту же ошибку и нашел этот вопрос при поиске.

Моя проблема заключалась в том, что моя вторая миграция была создана с использованием флага --initial, т.е.

$ ./manage.py startapp foo
$ ./manage.py schemamigration --initial foo
$ ./manage.py migrate foo

... внести некоторые изменения в foo ...

$ ./manage.py schemamigration --initial foo

(упс!)

$ ./manage.py migrate foo

... и я получаю ошибку, и миграция завершается неудачно, потому что вВо время второй миграции South пытается создать таблицу, которая уже создана.

Решение

В моей папке миграций:

$ ls foo/migrations
0001_initial.py   0002_initial.py

удалите эту вторую миграцию и повторно экспортируйтевторая миграция с правильным флагом --auto:

$ rm foo/migrations/0002_initial.py
$ ./manage.py schemamigration --auto foo
$ ./manage.py migrate foo

Успех!

Могут быть и другие причины, вызывающие эту ошибку, но это было моим злом!

4 голосов
/ 13 марта 2011

Это существующее приложение?

В этом случае вам потребуется преобразовать его в дополнение к поддельному биту.

Здесь есть хорошие документы здесь при преобразованиисуществующее приложение.

Хотя их довольно сложно найти, если вы не знаете, где они уже находятся (;

Для преобразования после добавления юга к установленным приложениям:

./manage.py syncdb
./manage.py convert_to_south myapp
./manage.py migrate myapp 0001 --fake
0 голосов
/ 07 июля 2014

эта проблема действительно возникает, если один из случаев:

1) Вы сделали "schemamigration app_name --initial" после того, как один - "--auto" 2) Вы прервали последнюю миграцию, которую вы сделали.

Для решения этой проблемы вы применяете следующее:

1) пометить последнюю миграцию схемы как поддельную.

python manage.py schemamigration app_name --fake

Примечание. Убедитесь, что схема моделей совпадает со схемой таблиц в базе данных.

2) примените миграцию снова, выполнив

python manage.py schemamigration app_Name --auto
python manage.py migrate app-Name

Примечание: иногда вы можете добавить вручную конкретное поле, которое вы уже добавили, используя следующий синтаксис.

python manage.py schemamigration app_name --add-field My_model.added_field

Для получения дополнительной информации. Что касается юга, вы можете проверить его документацию здесь .

...