Django 数据库迁移命令

基础迁移命令大全

命令 作用 示例 说明
python manage.py makemigrations 自动检测模型变更并生成迁移文件 - 会扫描所有已注册的 app
python manage.py makemigrations app_name 只为指定 app 生成迁移文件 makemigrations system ✅ 推荐用于模块化项目
python manage.py migrate 执行所有迁移文件,更新数据库结构 - 会同步所有 app 的迁移
python manage.py migrate app_name 只迁移某个 app 的变更 migrate users 常用于局部调试或回滚
python manage.py migrate app_name migration_name 迁移到某个版本 migrate users 0003 可用于回滚或版本锁定
python manage.py showmigrations 查看所有迁移状态 - ✅ 已应用的前面有 X,未应用为空
python manage.py sqlmigrate app_name migration_name 查看某个迁移的 SQL 语句 sqlmigrate users 0002 不执行,只展示 SQL

高级迁移技巧

创建空迁移(用于手动写逻辑)

复制代码
python manage.py makemigrations --empty app_name

适合写 RunSQLRunPython、数据迁移等。

回滚迁移(慎用)

复制代码
python manage.py migrate app_name zero

会删除该 app 所有迁移记录和表结构。

指定数据库(多数据库场景)

复制代码
python manage.py migrate --database=your_db_alias

适用于 DATABASES 中配置了多个数据库。

清理并重建数据库(开发阶段)

复制代码
# 删除 SQLite 数据库
rm db.sqlite3

# 删除所有迁移文件(保留 __init__.py)
find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
find . -path "*/migrations/*.pyc" -delete

# 重新生成迁移
python manage.py makemigrations
python manage.py migrate

常见问题与解决方案

问题 原因 解决方案
修改模型但迁移文件没变化 没有实际字段变更 检查字段定义是否真的变化
migrate 报错字段已存在 数据库已有字段 手动编辑迁移文件或使用 RunSQL
多人协作迁移冲突 同时修改模型 合并迁移文件或统一命名规范
删除字段后 migrate 报错 有依赖或外键约束 拆分迁移步骤,先解除约束再删除字段

企业级推荐实践

  • 每个 app 单独执行 makemigrations app_name,保持迁移清晰

  • 每次迁移前执行 sqlmigrate 检查 SQL 语句

  • 所有迁移文件都应提交到 Git,避免协作冲突

  • 生产环境迁移前务必备份数据库

  • 对于复杂变更,建议拆分为多个迁移文件逐步执行

相关推荐
ACP广源盛1392462567316 小时前
IX8024与科学大模型的碰撞@ACP#筑牢科研 AI 算力高速枢纽分享
运维·服务器·网络·数据库·人工智能·嵌入式硬件·电脑
Elastic 中国社区官方博客16 小时前
ES|QL METRICS_INFO 和 TS_INFO:为你的时间序列数据建立目录
大数据·数据库·elasticsearch·搜索引擎·信息可视化·全文检索
俺不要写代码17 小时前
数据库:函数
数据库·mysql
风之所往_17 小时前
Python 3.0 新特性全面总结
python
2401_8822737217 小时前
如何在 CSS 中正确加载本地 JPG 背景图片
jvm·数据库·python
Lucas_coding17 小时前
【Claude Code Router】 Claude Code 兼容 OpenAI 格式 API, Claude code 接入本地部署模型
人工智能·python
测试员周周17 小时前
【AI测试系统】第5篇:从 Archon 看 AI 工程化落地:为什么"确定性编排+AI 弹性智能"是终局?
人工智能·python·测试
曹牧17 小时前
SQL:多个事务同时修改同一索引块
数据库·sql
aXin_ya17 小时前
微服务第八天 Sentinel 四种分布式事务模式
java·数据库·微服务
Ruci ALYS17 小时前
MySQL大小写敏感、MySQL设置字段大小写敏感
数据库·mysql