2016-11-22 74 views
0

我正在使用Django 1.9.7和MySQL。Django遷移部分完成

我有一個包含多個操作的遷移文件。

migrations.RemoveField(
     model_name='team', 
     name='country', 
    ), 
    migrations.AddField(
     model_name='team', 
     name='description', 
     field=models.CharField(blank=True, max_length=200, null=True), 
    ), 
    migrations.AlterField(
     model_name='team', 
     name='iso_country', 
     field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='sys_models.Country', verbose_name='Country'), 
    ), 

現在我的印象是,如果這些語句中的一個失敗,整個遷移將回滾作爲一個更大的交易的一部分。那是對的嗎?

我沒有看到這種行爲,相反,我發現某些DDL語句在遷移期間可能會成功,而另一個失敗。另外,我認爲訂單將自上而下應用,這是否正確?我不一定在Django遷移中看到這種行爲。

回答

1

Django將在SQLite和PostgreSQL的事務中運行遷移,因爲這些數據庫支持DDL事務。但是,MySQL does not support DDL transactions

我認爲這些操作是按順序運行的,所以我很驚訝你看到了不同的行爲,但我對代碼不夠熟悉,無法給出明確的答案。

+1

這就是我所關心的。感謝您的確認。我在最後半小時制定了一個計劃,我認爲訂單問題僅適用於第一個操作是RunPython操作(數據遷移)的遷移,該操作未指定爲原子操作。所以即使失敗了,遷移中的DDL語句也會被部分處理。 – samazi