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

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

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

相关推荐
深蓝电商API2 小时前
住宅代理与数据中心代理在爬虫中的选择
爬虫·python
晚霞的不甘3 小时前
揭秘 CANN 内存管理:如何让大模型在小设备上“轻装上阵”?
前端·数据库·经验分享·flutter·3d
市场部需要一个软件开发岗位3 小时前
JAVA开发常见安全问题:纵向越权
java·数据库·安全
海奥华23 小时前
mysql索引
数据库·mysql
历程里程碑3 小时前
普通数组----合并区间
java·数据结构·python·算法·leetcode·职场和发展·tornado
weixin_395448913 小时前
mult_yolov5_post_copy.c_cursor_0205
c语言·python·yolo
执风挽^4 小时前
Python基础编程题2
开发语言·python·算法·visual studio code
纤纡.4 小时前
PyTorch 入门精讲:从框架选择到 MNIST 手写数字识别实战
人工智能·pytorch·python
2601_949593654 小时前
深入解析CANN-acl应用层接口:构建高效的AI应用开发框架
数据库·人工智能
javachen__4 小时前
mysql新老项目版本选择
数据库·mysql