我正在使用Django 1.9.7和MySQL。
我有一个包含多个操作的迁移文件。
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语句可能在迁移期间成功而另一个DDL语句失败。另外,我认为订单会自上而下应用,这是正确的吗?我不一定在Django迁移中看到这种行为。
答案 0 :(得分:1)
Django将在SQLite和PostgreSQL的事务中运行迁移,因为这些数据库支持DDL事务。但是,MySQL does not support DDL transactions。
我认为操作是按顺序运行的,所以我很惊讶您看到了不同的行为,但我对代码不够熟悉,无法给出明确的答案。