Become a sponsor

使用 Django 内置的迁移系统管理数据库结构变更。Django 的迁移系统基于 django.db.migrations 模块,能够自动检测模型变更并生成迁移脚本。
迁移工具链
makemigrations + migrate)db_comment 参数自动添加数据库字段注释首次部署时,使用 Django 迁移命令完成建表:
# 方式一:执行所有迁移
python manage.py migrate
# 方式二:先生成迁移文件,再执行
python manage.py makemigrations
python manage.py migrate初始化流程
CREATE DATABASE djangoadmin.django.elevue DEFAULT CHARACTER SET utf8mb4;.env 中的数据库配置正确python manage.py migrate 自动创建所有表修改模型后,执行以下命令自动生成迁移脚本:
# 为所有应用生成迁移
python manage.py makemigrations
# 为指定应用生成迁移
python manage.py makemigrations example
# 查看迁移状态
python manage.py showmigrations注意事项
.env 中的数据库配置正确)migrations/ 目录# 应用所有待执行的迁移
python manage.py migrate
# 应用指定应用的迁移
python manage.py migrate example
# 应用到指定迁移版本
python manage.py migrate example 0001# 回滚指定应用到初始状态
python manage.py migrate example zero
# 回滚到指定版本
python manage.py migrate example 0001# 查看所有应用的迁移状态
python manage.py showmigrations
# 查看指定应用的迁移状态
python manage.py showmigrations example
# 查看迁移的 SQL 语句(不执行)
python manage.py sqlmigrate example 0001对于已有数据库,手动标记为已迁移状态:
# 标记指定应用为已迁移
python manage.py migrate --fake exampleDjango 4.1+ 支持通过 db_comment 参数为数据库字段添加注释。项目中的模型已自动生成 db_comment,在执行 migrate 时会自动同步到数据库:
class Example(BaseModel):
name = models.CharField(
max_length=100,
verbose_name="案例名称",
db_comment='案例名称' # 数据库字段注释
)每个应用的迁移文件位于 application/{app_name}/migrations/ 目录:
application/example/
├── __init__.py
├── models.py
├── forms.py
├── services.py
├── views.py
├── urls.py
├── apps.py
├── admin.py
└── migrations/
├── __init__.py
├── 0001_initial.py # 初始迁移
└── 0002_xxx.py # 后续迁移| 场景 | 命令 |
|---|---|
| 全新安装 | python manage.py migrate |
| 模型变更后生成迁移 | python manage.py makemigrations |
| 应用迁移 | python manage.py migrate |
| 回滚指定应用 | python manage.py migrate <app> zero |
| 查看迁移状态 | python manage.py showmigrations |
| 查看迁移 SQL | python manage.py sqlmigrate <app> <migration> |
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 迁移冲突 | 多人同时修改同一模型 | python manage.py makemigrations --merge 合并迁移 |
| 迁移文件丢失 | 删除了 migrations 目录 | 重新 makemigrations 生成 |
| 表已存在 | 手动建表后执行迁移 | python manage.py migrate --fake <app> |
| 字段不存在 | 模型与数据库不一致 | 检查迁移文件,手动修复数据库 |
| 迁移执行缓慢 | 大表结构变更 | 考虑分批迁移或在低峰期执行 |
Django 迁移系统通过 makemigrations 和 migrate 命令管理数据库结构变更。模型修改后自动生成迁移文件,审查无误后执行迁移。生产环境务必做好备份,迁移前先在测试环境验证。