Django中的check指令和sqlmigrate指令


官方文檔的解釋如下:

 

Django 有一個自動執行數據庫遷移並同步管理你的數據庫結構的命令 - 這個命令是 migrate,我們馬上就會接觸它 - 但是首先,讓我們看看遷移命令會執行哪些 SQL 語句。sqlmigrate 命令接收一個遷移的名稱,然后返回對應的 SQL:

$ python manage.py sqlmigrate polls 0001 

你將會看到類似下面這樣的輸出(我把輸出重組成了人類可讀的格式):

BEGIN; -- -- Create model Choice -- CREATE TABLE "polls_choice" ( "id" serial NOT NULL PRIMARY KEY, "choice_text" varchar(200) NOT NULL, "votes" integer NOT NULL ); -- -- Create model Question -- CREATE TABLE "polls_question" ( "id" serial NOT NULL PRIMARY KEY, "question_text" varchar(200) NOT NULL, "pub_date" timestamp with time zone NOT NULL ); -- -- Add field question to choice -- ALTER TABLE "polls_choice" ADD COLUMN "question_id" integer NOT NULL; ALTER TABLE "polls_choice" ALTER COLUMN "question_id" DROP DEFAULT; CREATE INDEX "polls_choice_7aa0f6ee" ON "polls_choice" ("question_id"); ALTER TABLE "polls_choice" ADD CONSTRAINT "polls_choice_question_id_246c99a640fbbd72_fk_polls_question_id" FOREIGN KEY ("question_id") REFERENCES "polls_question" ("id") DEFERRABLE INITIALLY DEFERRED; COMMIT; 

請注意以下幾點:

  • 輸出的內容和你使用的數據庫有關,上面的輸出示例使用的是 PostgreSQL。
  • 數據庫的表名是由應用名(polls)和模型名的小寫形式( questionchoice)連接而來。(如果需要,你可以自定義此行為。)
  • 主鍵(IDs)會被自動創建。(當然,你也可以自定義。)
  • 默認的,Django 會在外鍵字段名后追加字符串 "_id" 。(同樣,這也可以自定義。)
  • 外鍵關系由 FOREIGN KEY 生成。你不用關心 DEFERRABLE 部分,它只是告訴 PostgreSQL,請在事務全都執行完之后再創建外鍵關系。
  • 生成的 SQL 語句是為你所用的數據庫定制的,所以那些和數據庫有關的字段類型,比如 auto_increment (MySQL)、 serial (PostgreSQL)和 integer primary key autoincrement (SQLite),Django 會幫你自動處理。那些和引號相關的事情 - 例如,是使用單引號還是雙引號 - 也一樣會被自動處理。
  • 這個 sqlmigrate 命令並沒有真正在你的數據庫中的執行遷移 - 它只是把命令輸出到屏幕上,讓你看看 Django 認為需要執行哪些 SQL 語句。這在你想看看 Django 到底准備做什么,或者當你是數據庫管理員,需要寫腳本來批量處理數據庫時會很有用。

如果你感興趣,你也可以試試運行 python manage.py check ;這個命令幫助你檢查項目中的問題,並且在檢查過程中不會對數據庫進行任何操作。


免責聲明!

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



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