Django项目修改模型后迁移遇到duplicate column name的解决办法
命令行操作实例
(venv) ➜ wms git:(v18) ✗ python baking_wms/manage.py migrate
Operations to perform:
Apply all migrations: accounts, admin, auth, contenttypes, cost, delivery, equipment, inventory, material, procurement, production, quality, recipe, sales, sessions, store
Running migrations:
Applying delivery.0002_deliveryorder_driver_deliveryorder_shipment_and_more...Traceback (most recent call last):
File "/Users/liuyuhua/trae/wms/venv/lib/python3.11/site-packages/django/db/backends/utils.py", line 103, in _execute
return self.cursor.execute(sql)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/liuyuhua/trae/wms/venv/lib/python3.11/site-packages/django/db/backends/sqlite3/base.py", line 350, in execute
return super().execute(query)
^^^^^^^^^^^^^^^^^^^^^^
sqlite3.OperationalError: duplicate column name: driver_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Users/liuyuhua/trae/wms/baking_wms/manage.py", line 22, in <module>
main()
File "/Users/liuyuhua/trae/wms/baking_wms/manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "/Users/liuyuhua/trae/wms/venv/lib/python3.11/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
utility.execute()
File "/Users/liuyuhua/trae/wms/venv/lib/python3.11/site-packages/django/core/management/__init__.py", line 436, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/liuyuhua/trae/wms/venv/lib/python3.11/site-packages/django/core/management/base.py", line 413, in run_from_argv
self.execute(*args, **cmd_options)
File "/Users/liuyuhua/trae/wms/venv/lib/python3.11/site-packages/django/core/management/base.py", line 459, in execute
output = self.handle(*args, **options)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/liuyuhua/trae/wms/venv/lib/python3.11/site-packages/django/core/management/base.py", line 107, in wrapper
res = handle_func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/liuyuhua/trae/wms/venv/lib/python3.11/site-packages/django/core/management/commands/migrate.py", line 357, in handle
post_migrate_state = executor.migrate(
^^^^^^^^^^^^^^^^^
File "/Users/liuyuhua/trae/wms/venv/lib/python3.11/site-packages/django/db/migrations/executor.py", line 135, in migrate
state = self._migrate_all_forwards(
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/liuyuhua/trae/wms/venv/lib/python3.11/site-packages/django/db/migrations/executor.py", line 167, in _migrate_all_forwards
state = self.apply_migration(
^^^^^^^^^^^^^^^^^^^^^
File "/Users/liuyuhua/trae/wms/venv/lib/python3.11/site-packages/django/db/migrations/executor.py", line 255, in apply_migration
state = migration.apply(state, schema_editor)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/liuyuhua/trae/wms/venv/lib/python3.11/site-packages/django/db/migrations/migration.py", line 132, in apply
operation.database_forwards(
File "/Users/liuyuhua/trae/wms/venv/lib/python3.11/site-packages/django/db/migrations/operations/fields.py", line 110, in database_forwards
schema_editor.add_field(
File "/Users/liuyuhua/trae/wms/venv/lib/python3.11/site-packages/django/db/backends/sqlite3/schema.py", line 318, in add_field
super().add_field(model, field)
File "/Users/liuyuhua/trae/wms/venv/lib/python3.11/site-packages/django/db/backends/base/schema.py", line 768, in add_field
self.execute(sql, params or None)
File "/Users/liuyuhua/trae/wms/venv/lib/python3.11/site-packages/django/db/backends/base/schema.py", line 202, in execute
cursor.execute(sql, params)
File "/Users/liuyuhua/trae/wms/venv/lib/python3.11/site-packages/django/db/backends/utils.py", line 122, in execute
return super().execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/liuyuhua/trae/wms/venv/lib/python3.11/site-packages/django/db/backends/utils.py", line 79, in execute
return self._execute_with_wrappers(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/liuyuhua/trae/wms/venv/lib/python3.11/site-packages/django/db/backends/utils.py", line 92, in _execute_with_wrappers
return executor(sql, params, many, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/liuyuhua/trae/wms/venv/lib/python3.11/site-packages/django/db/backends/utils.py", line 100, in _execute
with self.db.wrap_database_errors:
File "/Users/liuyuhua/trae/wms/venv/lib/python3.11/site-packages/django/db/utils.py", line 91, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/Users/liuyuhua/trae/wms/venv/lib/python3.11/site-packages/django/db/backends/utils.py", line 103, in _execute
return self.cursor.execute(sql)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/liuyuhua/trae/wms/venv/lib/python3.11/site-packages/django/db/backends/sqlite3/base.py", line 350, in execute
return super().execute(query)
^^^^^^^^^^^^^^^^^^^^^^
django.db.utils.OperationalError: duplicate column name: driver_id
(venv) ➜ wms git:(v18) ✗ python baking_wms/manage.py shell
Python 3.11.9 (v3.11.9:de54cf5be3, Apr 2 2024, 07:12:50) [Clang 13.0.0 (clang-1300.0.29.30)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> drop table delivery_deliveryorder;
File "<console>", line 1
drop table delivery_deliveryorder;
^^^^^
SyntaxError: invalid syntax
>>> DROP TABLE delivery_deliveryorder;
File "<console>", line 1
DROP TABLE delivery_deliveryorder;
^^^^^
SyntaxError: invalid syntax
>>> exit()
(venv) ➜ wms git:(v18) ✗ cd baking_wms
(venv) ➜ baking_wms git:(v18) ✗ sqlite3 db.sqlite3
SQLite version 3.43.2 2023-10-10 13:08:14
Enter ".help" for usage hints.
sqlite> drop table delivery_deliveryorder;
sqlite> .quit
主要问题
- duplicate column name错误提示
- 如何进入sqlite3数据库删除相应表格
解决方法及拓展
原因分析
因为数据库中已经存在与迁移文件中定义的列名相同的字段:原因是因为修改了模型,但之前已经在数据库创建了对应的表格,所以会造成列名相同的冲突
sqlite3的数据操作
sqlite3 baking_wms/db.sqlite3
进入
.tables
查看所有表格
sqlite> drop table delivery_deliveryorder;
删除表格
sqlite> drop table delivery_driver;
sqlite> drop table delivery_vehicle;
.quit
退出