【Django2.0】python manage.py makemigrations 和 python manage.py migrate的区别

时间:2021-10-31 18:00:16

   无论当我们第一次在models.py中创建类对象还是对类中的属性进行修改,我们都会使用python manage.py makemigrations 和 python manage.py migrate 两个命令,单纯从这两这个命令来看的话其实仅仅只是后面makemigrations和migrate的区别

  在models中第一次创建models类,如图所示:

  【Django2.0】python manage.py makemigrations 和 python manage.py migrate的区别

  下面使用python manage.py makemigrations 命令:

   【Django2.0】python manage.py makemigrations 和 python manage.py migrate的区别


  红线框中表示在blog应用目录下的migations的文件下多了一个001的文件,我们来看看这个文件中的具体内容是什么:

  【Django2.0】python manage.py makemigrations 和 python manage.py migrate的区别

这个文件里面的内容表示我们创建了一个Employee这个模型类,并且指出这个类的成员属性id,name,以及他们的属性,我们知道在models.py创建模型类,其中一个模型类对应的是一张数据表,来看看执行了刚刚的那条命令止之后数据库中有没有发生什么变化,我们想要的数据表是不是已经创建好了,如下图所示:

【Django2.0】python manage.py makemigrations 和 python manage.py migrate的区别

可以看到数据库里面并没有我们想要创建的数据表,那刚刚那条命令具体执行了什么语句,我们可以使用python manage.py sqlmugrate appname 文件名 进行查看:

【Django2.0】python manage.py makemigrations 和 python manage.py migrate的区别


和0001文件中的内容是一致的,下面开始执行python manage.py migrate,如下图:

【Django2.0】python manage.py makemigrations 和 python manage.py migrate的区别


下面再看一下数据库:【Django2.0】python manage.py makemigrations 和 python manage.py migrate的区别

我们发下执行完指一条命令之后,我们所想要创建的数据表出现了,对应的字段也出现了

   到这里我们差不多就知道了,python manage.py makemigrations这个命令是记录我们对models.py的所有改动,并且将这个改动迁移到migrations这个文件下生成一个文件例如:0001文件,如果你接下来还要进行改动的话可能生成就是另外一个文件不一定都是0001文件,但是这个命令并没有作用到数据库,这个刚刚我们在上面的操作过程之后已经看到了,而当我们执行python manage.py migrate 命令时  这条命令的主要作用就是把这些改动作用到数据库也就是执行migrations里面新改动的迁移文件更新数据库,比如创建数据表,或者增加字段属性

   另外一个需要注意的是这两个命令默认情况下是作用于全局,也就是对所有最新更改的models或者migrations下面的迁移文件进行对应的操作,如果要想仅仅对部分app进行作用的话  则执行如下命令:

python manage.py makemigrations appname,

python manage.py migrate appname,

如果要想精确到某一个迁移文件则可以使用:

python manage.py migrate appname 文件名