解决Django数据迁移1091错误:无法删除字段
本文介绍在Django执行数据迁移时遇到的1091错误,提示无法删除指定列。通过分析生成的迁移文件,发现其中包含已存在于数据库的字段删除操作。解决方法是手动注释迁移文件中多余的RemoveField语句,保留必要的AlterField操作,重新运行migrate命令即可成功完成数据迁移。
Django迁移报错1091现象
问题描述
今日在Pycharm终端执行数据迁移时,第一步运行Python manage.py makemigrations命令未出现异常。然而在执行第二步Python manage.py migrate进行实际迁移时,系统抛出错误,具体报错信息见相关截图。

该错误的核心代码为1091,其含义是“无法删除'dt_id';请检查列/键是否存在”。这表明数据库层面可能并不存在需要删除的目标字段,或者迁移文件中的删除指令与当前数据库状态冲突。
错误原因分析与处理方案
问题的解决
分析:
造成此问题的原因通常涉及数据库字段结构与迁移日志的不一致。尽管数据库中该字段的修改可能已完成,但在执行数据迁移时,系统生成的迁移日志文件(例如名为0003_auto_20191011_2032.py的文件)中可能仍保留了针对某些字段的删除操作记录,导致迁移脚本试图删除数据库中不存在的列。
# Generated by Django 2.0.6 on 2019-10-11 12:32
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('modelapp', '0002_student'),
]
operations = [
migrations.RemoveField(
model_name='student',
name='age',
),
migrations.RemoveField(
model_name='student',
name='birthday',
),
migrations.RemoveField(
model_name='student',
name='salary',
),
migrations.AlterField(
model_name='student',
name='tel',
field=models.CharField(max_length=20),
),
]
如上图所示,红色字体标注的部分即为导致数据迁移报错的具体原因。解决该问题的方法是将这些红色字体标注的代码行进行注释处理,使其不再执行。
# Generated by Django 2.0.6 on 2019-10-11 12:32
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('modelapp', '0002_student'),
]
operations = [
# migrations.RemoveField(
# model_name='student',
# name='age',
# ),
# migrations.RemoveField(
# model_name='student',
# name='birthday',
# ),
# migrations.RemoveField(
# model_name='student',
# name='salary',
# ),
migrations.AlterField(
model_name='student',
name='tel',
field=models.CharField(max_length=20),
),
]
完成上述注释修改后,再次执行Python manage.py migrate命令,即可成功完成数据迁移操作。
总结
以上内容介绍了执行Django数据迁移时出现1091错误的排查与解决思路,希望能对遇到相同问题的开发者有所帮助。如有任何疑问,欢迎留言交流,我们将及时回复。感谢各位对本站的支持! 若本文对您有帮助,欢迎转载,请注明出处,谢谢!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









