Django makemigrations 和 migrate 作用详解
开始接触Django编程,用来写后端代码。后端必然需要和数据库打交道,在Django中对于数据库模型一般写在models.py文件中。
当写好之后,需要在setting文件中配置 引入'api.apps.ApiConfig' 。
然后在运行之前需要做两件事:
1. python3 manage.py makemigrations
makemigrations的作用是Django会去检查创建或修改数据库,如果不合法会给出提示。
当第一次执行该操作,会在app下面创建migrations目录,并创建0001_inital.py文件,文件中记录了当前的建表、依赖等信息。
当下一次执行该操作,如果有关于model.py改动,会在migrations下生成已修改内容为名,类似0002_alter_permission_name_max_length.py的文件,文件中记录了你修改字段等信息。如果没有改动则提示:No changes detected。需要注意的是,此时这些改动还并没有被真正执行,迁移到数据库中!
我们可以使用 ‘python3 manage.py sqlmigrate appname xxx’ 去查看执行的sql语句,例如:
python3 manage.py sqlmigrate api 0001
从截图中可以看出,创建了一个名为api_userinfo的表,有三个字段。
可以使用python3 manage.py showmigrations 去查看当前项目所有的app及对应的已经生效的migration文件,其中[x]表示migrte通过,[]表示未通过 。如下所示,我的api项目里的initial通过。注意:[]migration文件未通过的,可以通过删除migrations下对应名称文件撤销这次更新。
2. python manage.py migrate
执行完makemigrations只是生成了对应的sql语句,还并没真正将改动迁移到数据库中。需要执行migrate才能将改动迁移到数据库,完成建表、修改字段等操作。
所以综上所述,makemigrations生成ddl(数据库模式定义语言),migrate真正地去执行ddl。
参考资料:
1. https://blog.****.net/weixin_33127753/article/details/90717038