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,避免协作冲突

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

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

相关推荐
陈天伟教授6 小时前
人工智能训练师认证教程(2)Python os入门教程
前端·数据库·python
2301_764441336 小时前
Aella Science Dataset Explorer 部署教程笔记
笔记·python·全文检索
爱笑的眼睛116 小时前
GraphQL:从数据查询到应用架构的范式演进
java·人工智能·python·ai
BoBoZz196 小时前
ExtractSelection 选择和提取数据集中的特定点,以及如何反转该选择
python·vtk·图形渲染·图形处理
liwulin05066 小时前
【PYTHON-YOLOV8N】如何自定义数据集
开发语言·python·yolo
Elastic 中国社区官方博客6 小时前
Elasticsearch:在分析过程中对数字进行标准化
大数据·数据库·elasticsearch·搜索引擎·全文检索
聪明努力的积极向上6 小时前
【MYSQL】字符串拼接和参数化sql语句区别
数据库·sql·mysql
代码or搬砖7 小时前
RBAC(权限认证)小例子
java·数据库·spring boot
神仙别闹7 小时前
基于QT(C++)实现学本科教务系统(URP系统)
数据库·c++·qt
2301_768350237 小时前
MySQL为什么选择InnoDB作为存储引擎
java·数据库·mysql