Django2.0

    技术2022-07-11  82

    只要模型文件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进行迁移记录 python manage.py migrate appname python manage.py migrate appname 文件名 //只迁移某一个文件
    Processed: 0.011, SQL: 9