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

ользую Юг с моим приложением Django. У меня есть две модели, которые я меняю сForeignKey отношение к наличиюOneToOneField связь. Когда я запустил эту миграцию в своей базе данных dev, она прошла нормально. Когда миграция запускается как часть создания тестовой базы данных, последняя миграция завершается с ошибкой MySQL 1005: «Не удается создать таблицу mydb. # Sql-3249_1d (errno: 121)». Выполнение некоторого поиска в Google показало, что обычно это проблема с попыткой добавить ограничение с тем же именем, что и существующее ограничение. Конкретная строка в миграции, на которой происходит сбой:

Отношение было изменено с:

class MyModel(models.Model):
    othermodel = models.ForeignKey(OtherModel)

в

class MyModel(models.Model):
    othermodel = models.OneToOneField(OtherModel)

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

db.alter_column('myapp_mymodel', 'othermodel_id', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['myapp.OtherModel'], unique=True))

db.create_unique('myapp_mymodel', ['othermodel_id'])

Но вместо того, чтобы потерпеть неудачу наcreate_unique звоните, это терпит неудачу наalter_column вызов. Я запустил следующую команду, чтобы увидеть, какой SQL генерировался:

python manage.py migrate myapp 0010 --db-dry-run --verbosity=2

и распечатал

myapp:0010_auto__chg_field_mymodel_othermodel__add_unique_mymodel
   = ALTER TABLE `myapp_mymodel` ADD CONSTRAINT `myapp_mymodel_othermodel_id_uniq` UNIQUE (`othermodel_id`) []
   = SET FOREIGN_KEY_CHECKS=1; []
   = ALTER TABLE `myapp_mymodel` ADD CONSTRAINT `myapp_mymodel_othermodel_id_uniq` UNIQUE (`othermodel_id`) []

Кажется странным, что он пытается запуститьADD CONSTRAINT дважды, но если я уберуdb.create_unique вызов не генерирует SQL при запуске с--db-dry-run, но я все еще получаю ошибку, если я запускаю ее по-настоящему.

Я в недоумении, любая помощь приветствуется.

Ответы на вопрос(1)

Ваш ответ на вопрос