Bootstrap

python migate执行报错

一、背景

        前期手工调整了数据库表字段,导致django的makemigrations目录下的文件结构不一致,再次更新models.py时,执行报错:

django.db.utils.OperationalError: (1054, "Unknown column 'tag' in 'records_record'")

        执行 python manage.py showmigrations records结果如下,0009没有执行。

records

 [X] 0001_initial

 [X] 0002_emailsettings_systemsettings_record_suspend_reason_and_more

 [X] 0003_alter_record_tag_profile

 [X] 0004_create_audit_role

 [X] 0005_alter_record_tag_operationlog_auditlog

 [X] 0006_task_alter_record_tag

 [X] 0007_record_is_key_task

 [X] 0008_record_work_hours

 [ ] 0009_alter_record_tag

二、解决方法

(一)强制应用迁移(谨慎)

        如果你确定 records.0009_alter_record_tag 已经实际修改了数据库结构,但 _django_migrations 表中没有记录这一点,你可以尝试使用 --fake 参数强制将该迁移标记为已应用。不过这种方法应当非常谨慎地使用,因为它不会真正改变数据库结构,只会在 _django_migrations 表中做标记。

命令:

python manage.py migrate records 0009 --fake

(.venv) PS C:\Users\itops> python manage.py migrate records 0009 --fake

Operations to perform:

  Target specific migration: 0009_alter_record_tag, from records

Running migrations:

  Applying records.0009_alter_record_tag... FAKED

(.venv) PS C:\Users\itops> python manage.py showmigrations records     

records

 [X] 0001_initial

 [X] 0002_emailsettings_systemsettings_record_suspend_reason_and_more

 [X] 0003_alter_record_tag_profile

 [X] 0004_create_audit_role

 [X] 0005_alter_record_tag_operationlog_auditlog

 [X] 0006_task_alter_record_tag

 [X] 0007_record_is_key_task

 [X] 0008_record_work_hours

 [X] 0009_alter_record_tag

        然后继续应用后续的迁移:

pythion manage.py makemigrations

python manage.py migrate

;