Django 迁移中的操作错误

Posted

技术标签:

【中文标题】Django 迁移中的操作错误【英文标题】:OperationalError in Django Migrations 【发布时间】:2020-08-24 12:13:24 【问题描述】:

首先,我创建了一个名为“userorders”的模型,其中包含以下字段:id(默认)、user_idorder_id

然后在意识到我不需要order_id 之后,我首先将其从 mysql DB 中删除(使用 Workbench), 然后我在 Django 中对模型进行了更改,但它现在一直显示错误。

0013_orderdetails_userorders.py

migrations.CreateModel(
            name='userorders',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('user_id', models.IntegerField()),
                ('order_id', models.IntegerField()),
            ],
        ),

0014_remove_userorders_order_id.py

dependencies = [
        ('shoppingCart', '0013_orderdetails_userorders'),
    ]

    operations = [
        migrations.RemoveField(
            model_name='userorders',
            name='order_id',
        ),
    ]

0015_userorders_order_id.py

dependencies = [
    ('shoppingCart', '0014_remove_userorders_order_id'),
]

operations = [
    migrations.AddField(
        model_name='userorders',
        name='order_id',
        field=models.IntegerField(default=None),
        preserve_default=False,
    ),

0016_remove_userorders_order_id.py

dependencies = [
        ('shoppingCart', '0015_userorders_order_id'),
    ]

    operations = [
        migrations.RemoveField(
            model_name='userorders',
            name='order_id',
        ),
    ]

0017_auto_20200508_1639.py

dependencies = [
    ('shoppingCart', '0016_remove_userorders_order_id'),
]

operations = [
    migrations.RenameField(
        model_name='orderdetails',
        old_name='user_id',
        new_name='order_id',
    ),
]

错误 - 当我尝试为我所做的任何更改进行迁移时(更改不会反映在数据库中)

MySQLdb._exceptions.OperationalError: (1091, "Can't DROP 'order_id'; check that column/key exists")
The above exception was the direct cause of the following exception:
django.db.utils.OperationalError: (1091, "Can't DROP 'order_id'; check that column/key exists")

目前,userorders 包含 2 个字段 - iduser_id

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

问题是您的工作流程,您应该删除该字段,进行迁移并将迁移应用到您的数据库。

但是由于您现在遇到了问题,您可以通过在表中重新创建列 order_id 来解决它(使用工作台),然后执行 makemigrationsmigrate 然后 django 可以删除该列并且应该'不显示错误。

【讨论】:

在此之后,它现在显示一个新错误django.db.utils.OperationalError: (1054, "Unknown column 'user_id' in 'shoppingcart_orderdetails'") 但该表中不存在此类字段。我尝试在 DB 中制作一个,这导致Duplicate Column Name。你能帮忙吗? 您是手动创建迁移还是使用makemigrations 命令创建迁移?看起来 django 尝试应用迁移,但您的数据库没有“同步”/看起来与 django 期望的不同...... 好吧,只是为了澄清一下你被困在0017_auto_20200508_1639.py 对吗?并且您在表shoppingcart_orderdetails 中有一个列user_id

以上是关于Django 迁移中的操作错误的主要内容,如果未能解决你的问题,请参考以下文章

django 2 中的迁移错误; AttributeError:“str”对象没有属性“decode”

Django 如何摆脱迁移错误

具有默认值的外键上的 Django 1.7 迁移错误

Django 删除了 DDBB 表,不能再迁移:没有这样的表错误

陷入 django 南迁移 - TransactionManagement 错误

Django-Memsql 初始迁移错误