我正在使用South和我的Django應用程序。我有兩個模型,我從ForeignKey
關係變爲OneToOneField
關係。當我在我的開發數據庫上運行這個遷移時,它運行良好。當遷移作爲創建測試數據庫的一部分運行時,最新的遷移失敗並出現MySQL 1005錯誤:「無法創建表mydb。#sql-3249_1d(errno:121)」。做一些谷歌搜索顯示,這通常是一個問題,試圖添加與現有約束相同的名稱的約束。在遷移它未能對特定行是:Django - 將OneKey關係更改爲OneToOne
的關係變爲從:
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
呼叫失敗,它是失敗的01致電。我跑到下面的命令來查看正在發生什麼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
調用,當我使用--db-dry-run
運行時,不生成SQL,但如果我真的運行它,仍然會出現錯誤。
我在這裏虧本,任何幫助表示讚賞。
我創建完全相同的遷移一些天前,它運行得很好。你可以用不同的數據庫後端嘗試相同的代碼(我在PostgreSQL數據庫中做過)。 另外,請檢查您的南方版本。 – emyller
希望我能幫忙 - 我做了改變,它生成了相同的python和SQL代碼,並且遷移運行得很好,使用mysql 5.1.56 for win32。 – Hannele
在South郵件列表上詢問這個問題,你很可能找到答案。 –