Django迁移问题:手动修改数据库后执行迁移是否会报错?
关于迁移文件重复执行的报错问题
不一定不会抛出错误,得看具体情况:
- 要是迁移里的SQL是幂等性操作,比如带
IF NOT EXISTS的建表、加字段语句,执行时数据库会自动检测目标状态已经存在,直接跳过操作,不会报错。 - 但如果是非幂等操作,比如直接
CREATE TABLE(没加IF NOT EXISTS)、DROP COLUMN、修改字段类型/约束这类语句,执行时肯定会报错:- 建表会提示「表已存在」
- 删字段会提示「字段不存在」
- 修改字段约束可能提示状态冲突或已符合要求
- 另外还要看迁移工具的逻辑:有些工具会记录已执行的迁移版本,哪怕你手动改了库,只要工具没标记这个迁移已完成,还是会硬跑脚本,触发非幂等操作的报错;少数基于数据库状态对比的工具,会检测到当前库状态和迁移目标一致,直接跳过,不会报错。
内容的提问来源于stack exchange,提问作者Arie
相关产品推荐
相关产品推荐

