我们在使用Django创建工程的时候都使用makemigrations、migrate来生成最初的数据库模型,但是到最后都是直接在数据库中手动创建表,为什么呢?因为这些数据库迁移命令经常会显示No changes detected,明明我们已经改了数据库模型了,为什么提示没有变化呢?这里我们就要搞清楚,数据库迁移命令是怎么去识别模型变化的。详细的源码分析我这里就不做介绍了,说一下它的流程帮助你理解就可以了。
首先我们要知道,与数据库迁移相关的东西都有哪些?
- models.py中定义的模型
- APP下面的migrations目录
- 数据库中的django_migrations表
makemigrations
执行makemigrations命令的时候,执行流程如下:
1 . 根据注册的APP,获取所有APP下的migrations目录,遍历其下的py文件(不以_~开头的)
2 . 然后根据文件中的内容生成对应的数据库表模型
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)),
],