Django迁移部分完成

时间:2016-11-22 22:15:35

标签: python mysql django django-models

我正在使用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迁移中看到这种行为。

1 个答案:

答案 0 :(得分:1)

Django将在SQLite和PostgreSQL的事务中运行迁移,因为这些数据库支持DDL事务。但是,MySQL does not support DDL transactions

我认为操作是按顺序运行的,所以我很惊讶您看到了不同的行为,但我对代码不够熟悉,无法给出明确的答案。