我们在使用Django创建工程的时候都使用makemigrations、migrate来生成最初的数据库模型,但是到最后都是直接在数据库中手动创建表,为什么呢?因为这些数据库迁移命令经常会显示No changes detected,明明我们已经改了数据库模型了,为什么提示没有变化呢?这里我们就要搞清楚,数据库迁移命令是怎么去识别模型变化的。详细的源码分析我这里就不做介绍了,说一下它的流程帮助你理解就可以了。
首先我们要知道,与数据库迁移相关的东西都有哪些?
- models.py中定义的模型
- APP下面的migrations目录
- 数据库中的django_migrations表
makemigrations
执行makemigrations命令的时候,执行流程如下:
- 根据注册的APP,获取所有APP下的migrations目录,遍历其下的py文件(不以_~开头的)
- 然后根据文件中的内容生成对应的数据库表模型
class Migration(migrations.Migration): initial = True dependencies = [ ] operations = [ migrations.CreateModel( name='Course', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(max_length=64)), ], ), ]
3 . 再根据models.py文件中的类生成数据库表模型
4 . 对比2、3中生成的模型字段,如果有变化就在对应APP的migrations目录下生成新的.py文件
migrate
执行migrate命令的时候,执行流程如下:
- 根据注册的APP,获取所有APP下的migrations目录,遍历其下的py文件(不以_~开头的)
- 根据migrations目录下的所有迁移文件生成数据库表模型
- 读取django_migrations表中的所有记录,其中记录的是所有表生成的迁移文件信息
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1148
183.71 KB下载数642
644.84 KB下载数2756
相关文章
发现更多好内容- Java 输入输出流出现问题该如何解决?(Java输入输出流出现问题怎么解决)
- Java 验证码的存储方式都有哪些呢?(Java验证码的存储方式有哪些)
- 在 Java 集合框架中,Arrays 类究竟有着怎样的地位?(Arrays类在Java集合框架中的地位)
- Java 调用 WebService 服务的详细步骤有哪些?(java调用WebService服务的步骤是什么)
- Java中MVC设计模式的特点有哪些?(java中mvc设计模式有哪些特点)
- 如何进行 Java FastCGI 的性能优化?(含策略详解)(java fastcgi的性能优化策略)
- Java 动态定时任务重启后消失的解决办法(java动态定时任务重启就没了怎么解决)
- 如何调整 Java 虚拟机参数?(详细教程及常见问题解答)(java虚拟机参数如何调整)
- 如何分析 JavaOutOfMemoryError 的错误日志?(JavaOutOfMemoryError的错误日志如何分析)
- Java 中缓存流的优势与劣势究竟有哪些?(Java中缓存流的优势与劣势分别是什么)
猜你喜欢
AI推送时光机 咦!没有更多了?去看看其它编程学习网 内容吧