只要模型文件models.py进行了内容的更新,我们都会使用python manage.py makemigrations 和 python manage.py migrate这两个命令。
Part1
当我们第一次在models.py文件新建model类(一个类对应数据库中的一张数据表)时,执行python manage.py makemigrations 命令之后,应用目录下的migations的文件下多了一个001的文件。
文件内容记录了我们刚才在medels.py文件的操作。
查看目录结构:
但此时看数据库里的数据表,并没有。
再执行python manage.py migrate,此时刷新数据库可以看到新建好的数据表,数据表中字段也出现了
综上:python manage.py makemigrations命令记录对models文件的修改。python manage.py migrate命令在数据库中创建表和数据
Part2
问题:
对已有的models.py文件进行了一些修改,需要重新迁移数据该怎么使用命令?
方法:修改部分较小时,修改models文件后,重新执行命令python manage.py makemigrations、python manage.py migrate。
注意:有时必须要删除001文件,因为Django会将你所有的操作放在这个0001文件中。你即使删除了数据库中的表,但是这个文件中记录你已经创建了表,所以在执行python manage.py migrate会提示“No migrations to apply”
问题:
两个命令的关系?可以只执行其中一个命令吗?
答案:首先,第一个命令的作用是记录即将要做的数据库操作,但实际上并没有进行数据库操作。第二个的命令的作用是对数据库进行操作(建表、改表等)。目前来说,第二个命令是必须要执行的,第一个命令需不需要必须执行,有待验证。
验证结果如下:
直接执行python manage.py migrate,结果报错:“ Your models have changes that are not yet reflected in a migration”
两个命令一起执行结果,映射成功:
part3
执行python manage.py migrate之后,可以使用python manage.py sqlmigrate appname migrations_num(例如python manage.py sqlmigrate user 0002)查看当前migrations文件对应的sql语句。
图
多个APP情况精确迁移:
python manage.py makemigrations appname //对某个app进行迁移记录
- 1
python manage.py migrate appname
- 1
python manage.py migrate appname 文件名 //只迁移某一个文件
- 1