Django2-migrate数据迁移

1,565 阅读2分钟

大家好,我是言淦,我今天带来的文章是《Django2-migrate数据迁移》,希望能给你们带来帮助!

环境: Django 2.2.1 + Python 3.6.7

当我们用到Dj的时候,ORM框架是绕不过的一个点,而ORM最重要的点就是将数据库表映射为一个类(表Model),也可以通过类直接生成我们要的数据库表。

在写数据表Model的时候,一般有以下两种情况:

  • 1.表已经创建好,只需写model
  • 2.表没有创建,需要通过model来生成表

对于第一种情况,只需要在settings.py等文件配置好数据库信息,即可通过该model操作数据库表,不需要执行其他命令。

对于第二种情况,则是今天的主题,涉及到的命令有makemigrations、migrate,sqlmigrate。

1.创建应用及创建数据Model

可参考我的另一篇文章!《Django1-配置MySQL数据库》

2.增加Model(方便测试)

from django.db import models

class StuGrade(models.Model):
    stu_id = models.IntegerField(primary_key=True)
    chinese = models.IntegerField()
    math = models.IntegerField()
    en = models.IntegerField()

    class Meta:
        db_table = 'stu_grade'

# 新增的
class StuInfo(models.Model):
    stu_id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=200)
    sex = models.SmallIntegerField()
    age = models.SmallIntegerField()

    class Meta:
        db_table = 'stu_info'

3.makemigrations命令

$ python manage.py makemigrations sqltest

makemigrations的作用是生成“数据库迁移文件”,“迁移“是 Django 对于模型定义(也就是你的数据库结构)的变化的储存形式。通过这份文件我们可以知道我们的Model会生成怎样的数据表,生成的迁移文件在migrations文件下, 注意这个命令并不会生成表,它只是告知你它会怎么生成表。

这里的sqltest指的是我创建的应用名。

4.sqlmigrate命令

$ python manage.py sqlmigrate sqltest

这个命令是通过SQL语句的方式告知你它是怎么创建表的,这个命令也不会生成表

$ python manage.py sqlmigrate sqltest 0001
BEGIN;
--
-- Create model StuGrade
--
CREATE TABLE `stu_grade` (`stu_id` integer NOT NULL PRIMARY KEY, `chinese` integer NOT NULL, `math` integer NOT NULL, `en` integer NOT NULL);
--
-- Create model StuInfo
--
CREATE TABLE `stu_info` (`stu_id` integer NOT NULL PRIMARY KEY, `name` varchar(255) NOT NULL, `sex` smallint NOT NULL, `age` smallint NOT NULL);
COMMIT;

5.migrate命令

$ python manage.py migrate sqltest

这个命令会在数据库中创建表,创建的SQL语句就是上文所看到的。

指定某一次迁移: $ python manage.py migrate sqltest 0001

查看migrate的详细信息 $ python manage.py migrate --help

6.Model的修改

我们的数据表的字段肯定不是一成不变的,所以我们会遇到修改Model的情况,这时的操作如下:

  • 1.修改Model内容(必选)
  • 2.makemigrations生成数据迁移文件(必选)
  • 3.sqlmigrate查看语句(可选)
  • 4.migrate执行(必选)

其中,每修改一次Model,我们都要进行一次“迁移”,每次迁移的时候都会生成一份迁移文件,迁移文件前面的序号是不断递增的。

第一次“迁移”的时候会在数据库创建一个django_migrations的表,这个表会记录你每次迁移的情况, 所以当你想重新生成所有新的表时,这张表对应的内容也要删除。

最后,迁移文件对我们来说非常重要,建议做好版本控制。

7.参考:

docs.djangoproject.com/zh-hans/2.2…

blog.csdn.net/qq_25730711…