為什么要進行python manage.py makemigrations 和 python manage.py migrate 的那些事


無論當我們第一次在models.py中創建類對象還是對類中的屬性進行修改,我們都會使用python manage.py makemigrations 和 python manage.py migrate 兩個命令,單純從這兩這個命令來看的話其實僅僅只是后面makemigrations和migrate的區別

  在models中第一次創建models類,如圖所示:

  

  下面使用python manage.py makemigrations 命令:

   

 

  紅線框中表示在blog應用目錄下的migations的文件下多了一個001的文件,我們來看看這個文件中的具體內容是什么:

  

這個文件里面的內容表示我們創建了一個Employee這個模型類,並且指出這個類的成員屬性id,name,以及他們的屬性,我們知道在models.py創建模型類,其中一個模型類對應的是一張數據表,來看看執行了剛剛的那條命令止之后數據庫中有沒有發生什么變化,我們想要的數據表是不是已經創建好了,如下圖所示:

可以看到數據庫里面並沒有我們想要創建的數據表,那剛剛那條命令具體執行了什么語句,我們可以使用python manage.py sqlmugrate appname 文件名 進行查看:

 

和0001文件中的內容是一致的,下面開始執行python manage.py migrate,如下圖:

 

下面再看一下數據庫:

我們發下執行完指一條命令之后,我們所想要創建的數據表出現了,對應的字段也出現了

   到這里我們差不多就知道了,python manage.py makemigrations這個命令是記錄我們對models.py的所有改動,並且將這個改動遷移到migrations這個文件下生成一個文件例如:0001文件,如果你接下來還要進行改動的話可能生成就是另外一個文件不一定都是0001文件,但是這個命令並沒有作用到數據庫,這個剛剛我們在上面的操作過程之后已經看到了,而當我們執行python manage.py migrate 命令時  這條命令的主要作用就是把這些改動作用到數據庫也就是執行migrations里面新改動的遷移文件更新數據庫,比如創建數據表,或者增加字段屬性

   另外一個需要注意的是這兩個命令默認情況下是作用於全局,也就是對所有最新更改的models或者migrations下面的遷移文件進行對應的操作,如果要想僅僅對部分app進行作用的話  則執行如下命令:

python manage.py makemigrations appname,

python manage.py migrate appname,

如果要想精確到某一個遷移文件則可以使用:

python manage.py migrate appname 文件名


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM