Django 数据库迁移:makemigrations 与 migrate 命令详解
·
Django 数据库迁移:makemigrations 与 migrate 命令详解
在 Django 框架中,数据库迁移是管理数据库模式变更的核心机制。makemigrations 和 migrate 是两个关键命令,它们协同工作实现数据库结构的版本控制。
1. makemigrations 命令
作用:根据模型(Model)变更生成迁移脚本
本质:将 models.py 的修改转化为可执行的数据库操作指令
流程:
python manage.py makemigrations [app_name]
- 检测模型变化(新增字段、修改约束等)
- 在应用目录下生成
migrations/000X_*.py迁移文件 - 文件内容包含
operations列表(如CreateModel,AlterField)
示例场景:
# models.py 新增字段
class Book(models.Model):
title = models.CharField(max_length=100)
+ author = models.CharField(max_length=50) # 新增字段
执行后生成迁移文件,包含:
operations = [
migrations.AddField(
model_name='book',
name='author',
field=models.CharField(max_length=50),
),
]
2. migrate 命令
作用:将迁移脚本应用到数据库
本质:执行迁移文件中的 SQL 操作
流程:
python manage.py migrate [app_name] [migration_name]
- 检查
django_migrations表(记录已应用的迁移) - 按依赖顺序执行未应用的迁移文件
- 修改数据库结构(创建表/字段/索引等)
关键机制:
- 幂等性:重复执行不会改变最终状态
- 原子性:默认事务执行(支持回滚)
3. 命令协作流程
graph LR
A[修改 models.py] --> B(makemigrations)
B --> C[生成迁移文件]
C --> D(migrate)
D --> E[更新数据库]
典型工作流:
- 开发阶段修改模型
- 执行
makemigrations生成迁移脚本 - 检查迁移文件(可手动修改)
- 执行
migrate应用变更 - 生产环境同步执行步骤 2-4
4. 高级用法与注意事项
迁移回滚:
# 回滚到指定迁移
python manage.py migrate app_name 0002_previous
迁移冲突解决:
- 当多人同时生成迁移时可能出现冲突
- 手动合并
dependencies和operations - 使用
--merge选项(需谨慎)
最佳实践:
- 迁移文件必须纳入版本控制(Git)
- 禁止直接修改数据库(绕过迁移系统)
- 生产环境执行前务必备份
- 使用
showmigrations查看迁移状态
5. 迁移文件解析
典型迁移文件结构:
class Migration(migrations.Migration):
dependencies = [
('app_name', '0001_initial'), # 依赖的前序迁移
]
operations = [
migrations.CreateModel(...), # 数据库操作指令
migrations.AlterField(...),
]
其中操作类型包括:
CreateModel/DeleteModelAddField/RemoveFieldAlterUniqueTogetherRunPython(自定义操作)
通过合理使用迁移系统,可实现数据库结构的精确版本控制,确保开发、测试、生产环境的一致性。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)