国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

Django4.0 遷移-壓縮遷移

2022-03-16 17:50 更新

我們鼓勵你自由地進行遷移,而不要擔心你有多少遷移;遷移代碼經過優(yōu)化,可以一次處理幾百個遷移,而不會有太多的減速。然而,最終你會希望從幾百個遷移回歸到只有幾個,這就是壓縮的作用。

壓縮是將一組現有的多個遷移減少到一個(有時是幾個)遷移,這些遷移仍然代表相同的更改。

Django通過獲取所有現有遷移,提取它們的 ?Operation ?并將它們按順序排列,然后對它們運行一個優(yōu)化器,以嘗試減少列表的長度——例如,它知道 ?CreateModel ?和 ?DeleteModel ?相互抵消,它還知道 ?AddField ?可以卷入 ?CreateModel?。

一旦操作序列被盡可能地減少——可能的數量取決于你的模型有多緊密交織,如果你有任何 RunSQL 或 RunPython 操作(除非它們被標記為 ?elidable?,否則無法被優(yōu)化),Django就會把它寫回一組新的遷移文件中。

這些文件被標記為替換了先前壓縮的遷移,因此它們可以與舊遷移文件共存,Django 將根據你在歷史記錄中的位置智能地在它們之間切換。如果你仍處于壓縮過程中,則它將繼續(xù)使用它們直到結束,然后切換到壓縮歷史記錄,而新安裝將使用新壓縮后的遷移并跳過所有舊遷移。

這樣你就可以壓縮而不至于把目前還沒有完全更新的生產系統搞亂。推薦的流程是壓縮,保留舊文件,提交并發(fā)布,等到所有系統都升級到新版本(或者如果你是第三方項目,確保你的用戶按順序升級版本,不跳過任何一個版本),然后刪除舊文件,提交并進行第二次發(fā)布。

支持這一切的命令是 ?squashmigrations?——把你想壓縮的應用標簽和遷移名稱傳給它,它就會開始工作:

$ ./manage.py squashmigrations myapp 0004
Will squash the following migrations:
 - 0001_initial
 - 0002_some_change
 - 0003_another_change
 - 0004_undo_something
Do you wish to proceed? [yN] y
Optimizing...
  Optimized from 12 operations to 7 operations.
Created new squashed migration /home/andrew/Programs/DjangoTest/test/migrations/0001_squashed_0004_undo_something.py
  You should commit this migration but leave the old ones in place;
  the new migration will be used for new installs. Once you are sure
  all instances of the codebase have applied the migrations you squashed,
  you can delete them.

如果要設置壓縮遷移的名稱而不是使用自動生成的遷移名稱,請使用 ?squashmigrations --squashed-name? 選項。
請注意,Django 中的模型相互依賴可能會變得非常復雜,壓縮可能會導致遷移無法運行;要么是優(yōu)化錯誤(在這種情況下,你可以用 ?--no-optimize? 再試一次,不過你也應該報告這個問題),要么是 ?CircularDependencyError?,在這種情況下,你可以手動解決它。
要手動解決 ?CircularDependencyError ?問題,請將循環(huán)依賴中的外鍵分離到單獨的遷移中,并將依賴項移到另一個應用上。如果你不確定,請參見 ?makemigrations ?在被要求從模型創(chuàng)建全新的遷移時如何處理問題。在未來的 Django 版本中,?squashmigrations ?將被更新以嘗試自己解決這些錯誤。
一旦你壓縮了你的遷移,你應該把它和它所替代的遷移一起提交,并把這個更改分發(fā)到你的應用程序的所有運行中的實例,確保它們運行 ?migrate ?來將更改存儲在它們的數據庫中。
然后,你必須通過以下方法將壓縮的遷移過渡到正常遷移:

  • 刪除它替換的所有遷移文件。
  • 將所有依賴被刪除遷移的遷移更新為依賴被壓縮的遷移。
  • 刪除壓縮遷移的 ?Migration ?類的 ?replaces ?屬性(這就是 Django 告訴它是壓縮遷移的方式)。

壓縮遷移后,在完全將其轉換為正常遷移之前,你不應該再重新壓縮該壓縮的遷移。


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號