Django2-migrate數據遷移

你們好,我是言淦,我今天帶來的文章是《Django2-migrate數據遷移》,但願能給大家帶來幫助!python

環境: Django 2.2.1 + Python 3.6.7sql

當咱們用到Dj的時候,ORM框架是繞不過的一個點,而ORM最重要的點就是將數據庫表映射爲一個類(表Model),也能夠經過類直接生成咱們要的數據庫表。shell

在寫數據表Model的時候,通常有如下兩種狀況:數據庫

  • 1.表已經建立好,只需寫model
  • 2.表沒有建立,須要經過model來生成表

對於第一種狀況,只須要在settings.py等文件配置好數據庫信息,便可經過該model操做數據庫表,不須要執行其餘命令。django

對於第二種狀況,則是今天的主題,涉及到的命令有makemigrations、migrate,sqlmigrate。bash

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 sqltestpost

makemigrations的做用是生成「數據庫遷移文件」,「遷移「是 Django 對於模型定義(也就是你的數據庫結構)的變化的儲存形式。經過這份文件咱們能夠知道咱們的Model會生成怎樣的數據表,生成的遷移文件在migrations文件下, 注意這個命令並不會生成表,它只是告知你它會怎麼生成表。測試

這裏的sqltest指的是我建立的應用名。spa

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…

相關文章
相關標籤/搜索