Django 模型迁移指南:从命令用法到最佳实践
一、迁移的工作原理
Django 迁移系统本质上是一套数据库版本控制系统,它通过以下三个核心环节实现模型与数据库的同步
生成迁移文件:当模型发生变更时,
makemigrations
命令会生成记录变更的 Python 脚本,存储在应用的migrations/
目录下
应用迁移文件:运行
migrate
命令会按顺序执行迁移文件,并通过数据库中的django_migrations
表记录执行状态,确保每个迁移只被执行一次

回滚迁移操作:支持将数据库状态回滚到指定的历史版本,可通过指定迁移编号或
zero
实现完全回滚
二、生成迁移文件:makemigrations
基本用法
修改模型后(比如添加字段、删除模型、修改字段类型等),使用以下命令生成迁移文件
实用选项
预览迁移内容:不实际创建文件,仅查看变更内容
解决迁移冲突:多开发者协作时合并迁移历史
迁移文件解释
迁移文件是自动生成的 Python 脚本,通常位于每个 app 的 migrations/
文件夹下
文件主要内容包括
迁移依赖关系(
dependencies
)操作列表(
operations
):记录字段添加、删除、类型修改等具体变更
三、应用迁移:migrate
基础用法
使用场景
第一次运行 Django 项目之前
修改了
models.py
中的模型定义添加了第三方 Django 应用
特殊场景处理
初始化已有数据库:当数据库表结构已存在时,使用假造 - fake-initial` 选项跳过初始迁移
查看迁移状态:检查哪些迁移已应用,哪些未应用
四、遗留数据库集成:inspectdb
当需要将 Django 与遗留数据库集成时,inspectdb
工具能帮我们自动生成模型代码,省去手动编写的麻烦。
基本用法
注意事项
使用重定向生成文件时,默认编码可能为 UTF-16 LE
,导致 Django 无法识别,解决方法有两种:
手动创建 Python 文件并复制内容
使用 VSCode 打开文件,通过 "选择编码" 功能重新保存为 UTF-8
五、迁移回滚
回滚前的准备工作
查看当前迁移状态
回滚前务必备份数据库,以防意外发生
回滚操作方法
回滚到指定迁移版本
完全回滚(清空所有迁移)
回滚操作过程
检查目标迁移版本与当前版本的差异
自动生成反向 SQL 语句(基于迁移文件中的 operations)
执行反向操作并更新 django_migrations 表记录
不会删除迁移文件,只是标记其为未执行状态
六、最佳实践
每次模型变更后生成并测试迁移
迁移文件应纳入版本控制
生产环境执行迁移前先在测试环境验证
复杂变更建议分步骤进行,避免一次性大规模迁移
谨慎使用回滚操作,先在测试环境验证回滚流程,再操作生产环境
文章转载自:小王子1024
评论