理解Django的makemigrations和migrate


在你改動了 model.py的內容之后執行下面的命令:

 

python manger.py makemigrations

相當於在該app下建立 migrations目錄,並記錄下你所有的關於modes.py的改動,比如0001_initial.py, 但是這個改動還沒有作用到數據庫文件

你可以手動打開這個文件,看看里面是什么。當makemigrations之后產生了0001_initial.py 文件,你可以查看下該migrations會對應於什么樣子的SQL命令,使用如下命令,

 

python manger.py sqlmigrate theapp 0001

看到的大概是這樣子的:

 

  1.  
    BEGIN;
  2.  
    CREATE TABLE "polls_choice" (
  3.  
    "id" serial NOT NULL PRIMARY KEY,
  4.  
    "choice_text" varchar(200) NOT NULL,
  5.  
    "votes" integer NOT NULL
  6.  
    );
  7.  
    CREATE TABLE "polls_question" (
  8.  
    "id" serial NOT NULL PRIMARY KEY,
  9.  
    "question_text" varchar(200) NOT NULL,
  10.  
    "pub_date" timestamp with time zone NOT NULL
  11.  
    );
  12.  
    ALTER TABLE "polls_choice" ADD COLUMN "question_id" integer NOT NULL;
  13.  
    ALTER TABLE "polls_choice" ALTER COLUMN "question_id" DROP DEFAULT;
  14.  
    CREATE INDEX "polls_choice_7aa0f6ee" ON "polls_choice" ("question_id");
  15.  
    ALTER TABLE "polls_choice"
  16.  
    ADD CONSTRAINT "polls_choice_question_id_246c99a640fbbd72_fk_polls_question_id"
  17.  
    FOREIGN KEY ("question_id")
  18.  
    REFERENCES "polls_question" ("id")
  19.  
    DEFERRABLE INITIALLY DEFERRED;
  20.  
     
  21.  
    COMMIT;


在makemigrations之后執行命令:

python manager.py migrate

將該改動作用到數據庫文件,比如產生table,修改字段的類型等。


免責聲明!

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



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