尧图精选

Django数据库迁移深度指南:migrate与makemigrations如何管理Schema变更(新手必读)

🕒 发布时间:2026/9/3 22:07:33 📁 来源:尧图网络
Django数据库迁移深度指南migrate与makemigrations如何管理Schema变更新手必读【免费下载链接】djangoThe Web framework for perfectionists with deadlines.项目地址: https://gitcode.com/GitHub_Trending/dj/djangoDjango 数据库迁移Migrations是管理数据库 Schema 变更的核心机制只需makemigrations和migrate两条命令就能把模型代码的每一次改动安全地同步到数据库。本指南面向新手讲清这两条命令的职责、常用辅助命令与常见坑让你彻底告别手动改表结构。1️⃣ 为什么需要 Django 数据库迁移想象你改了一个字段把Title从短文本变长、新增一个必填字段、或者干脆删掉一张表。数据库不会自动感知这些变化——模型代码.py和数据库表结构Schema必须保持一致否则轻则报字段不存在重则数据错乱。Django 迁移的思路非常直观概念类比说明迁移文件数据库的代码提交记录每个.py文件描述一次 Schema 变更按顺序编号makemigrationsgit diff对比模型与当前 Schema生成变更脚本migrategit apply按顺序把迁移执行到数据库所有迁移文件都集中存放在各应用的migrations/目录例如 django/db/migrations/ 就是 Django 框架自身应用的迁移目录团队里每个成员执行相同的迁移序列得到的数据库结构完全一致。2️⃣ 第一步makemigrations 生成迁移文件当你修改了模型比如给Question加一个slug字段运行python manage.py makemigrations它的工作流程是自动检测器django/db/migrations/autodetector.py对比你写好的模型定义和上一次迁移记录的 Schema 状态差异被翻译成AddField、AlterField、CreateModel等操作对象自动生成一个类似0002_question_slug.py的迁移文件。 小技巧加--check参数只检测不写文件适合放进 CI 检查是否有人改了模型忘了提交迁移。源码实现见 makemigrations.py。上基于模型自动生成的后台表单——模型字段一变表单随之改变这正是Schema 与代码一致的价值所在。3️⃣ 第二步migrate 把变更应用到数据库python manage.py migrate这条命令Updates database schema. Manages both apps with migrations and those without.见 migrate.py。它会查询数据库中的迁移记录表找出哪些迁移已执行按依赖顺序执行器负责依次运行未执行的迁移每一步都在数据库事务中完成失败可整体回滚避免留下半成品表结构。常用参数速查参数作用migrate polls只迁移polls应用migrate zero回滚该应用的所有迁移撤销到空状态migrate --plan只列出将要执行的迁移不真正执行migrate --fake标记为已执行但不跑 SQL适用于手工已建表场景4️⃣ 三个新手救星命令showmigrations查看迁移状态python manage.py showmigrations每个迁移前会打[X]已执行或[ ]待执行是排查我到底跑到哪一步了的第一工具。源码showmigrations.py。sqlmigrate只看 SQL 不执行python manage.py sqlmigrate polls 0002把指定迁移翻译成纯 SQL 打印出来——上线前预演表结构变更、评估锁表风险时非常有用。源码sqlmigrate.py。squashmigrations合并历史迁移文件积累多了比如上百个会拖慢初始化速度squashmigrations能把一段历史压缩成一个文件。源码squashmigrations.py。5️⃣ 团队协作中的典型场景上Schema 同步后后台数据列表正常展示——这正是迁移机制保障的代码与数据库一致效果。同事 A 改了模型他提交迁移文件同事 Bgit pull后执行migrate本地数据库即刻对齐多人同时开发冲突如果两个迁移都叫0003_xxx产生编号冲突用makemigrations --merge生成合并迁移即可部署新环境全新数据库直接跑migrate会按 0001 → 0002 → … 顺序把全部历史迁移执行完一步到位。加载迁移的底层逻辑在 loader.py它会把各应用的迁移构建成一个有向无环图DAG保证依赖关系正确。6️⃣ 新手避坑清单❌ 坑✅ 正确做法手工改数据库表后不记录改动模型后用makemigrations补一个迁移删字段/改类型时直接执行先用sqlmigrate预览大数据表评估停机时间在迁移里写业务逻辑数据迁移放在RunPython中且必须可逆、幂等忘记提交迁移文件团队约定改模型必须同时提交迁移7️⃣ 总结记住两条命令即可入门 完整流程一句话改模型 →makemigrations生成脚本 → 审查脚本 →migrate应用到数据库。想深入实践推荐阅读官方教程文档 howto/writing-migrations.txt里面手把手演示了手写迁移、处理冲突和数据迁移命令参数的完整定义可对照 migrate.py 与 makemigrations.py。掌握这套机制后你的 Django 数据库 Schema 变更就像代码一样——可追踪、可回滚、可协作。【免费下载链接】djangoThe Web framework for perfectionists with deadlines.项目地址: https://gitcode.com/GitHub_Trending/dj/django创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →