2015-02-09 115 views
7

我個人喜歡django的MVC理想。但是,當我在版本1.7中運行Django遷移時,我在其中執行的每個遷移都存儲在遷移目錄中。如果我刪除這些文件,它將在遷移時發生錯誤。我可以刪除遷移目錄中的django遷移文件嗎

我測試過這樣。我創建了一個新的Django項目並啓動了一個git回購。我在Django中運行了3-4次遷移,導致遷移目錄下有3-4個遷移文件。我試圖刪除舊的很遷移文件即(第一和第二遷移文件),並試圖運行

python manage.py makemigrations 

這確實會導致一些錯誤,如「未找到遷移文件」。後來我做了一個恢復被刪除文件的git存儲。現在我試圖再次運行相同的命令,它工作正常。

我的問題是,如果一個人在開發過程中對數據庫執行了大約50次更改,則所有遷移文件都存儲在遷移目錄中。是否有可能刪除這些文件,並再次修改數據庫,而不會中斷?

+0

你對有您想了解應用的遷移現有的數據庫開發?如果是這樣,你不想刪除這些模式。如果您使用syncdb從頭開始創建新的數據庫,那麼您不需要任何舊的遷移。所以我認爲答案是「取決於你的數據庫設置」 – 2015-02-09 07:20:14

+0

把我之前的評論換個角度來看,放棄你的50個遷移最簡單的方法就是放棄數據庫(它有50個遷移),並從頭開始楷模。這對你來說是一種選擇嗎? – 2015-02-09 07:25:35

+1

我正在使用現有的數據庫。所以如果我刪除我的數據庫然後我可以刪除遷移文件是不是? – 2015-02-09 07:39:44

回答

7

答案是「視情況而定」。

如果您正在處理生產數據庫或某些無法定期由於任何原因而被吹走的數據庫,那麼您絕對需要保留已應用於數據庫的遷移文件。他們應該用代碼的其餘部分檢入源代碼控制。

現在,對於像你這樣的情況,放棄50次遷移的最簡單方法就是放棄db(以及50次遷移),並根據當前模型從頭開始。在開發過程中隨着模型的發展而定期做這件事通常是一個好主意。

當你吹掉你的數據庫時,它可以吹走你的模型,因爲syncdb將使用你當前的模型建立一個空白數據庫。然後它可以選擇使用任何初始裝置填充數據庫。從概念上講,在這種情況下你已經不再有任何東西了,所以你不需要爲舊的數據庫保留舊的遷移。它們不再相關。

刪除已經應用到數據庫的遷移文件通常不是很好,除非您要麼完全吹掉數據庫,要麼2)首先恢復遷移。

您可能也會意識到,當您將遷移應用到數據庫時,它也會將這些遷移記錄在數據庫本身的特殊表中。這就是爲什麼當你只是刪除遷移文件時,事情變得不合時宜。他們必須保持同步與遷移表

0

如果你要保持你的數據庫,但減少的遷移文件的數量,一個選擇是壓垮遷移成一個(或幾個,如果複雜的依賴關係)移民。

從官方文檔:

鼓勵你做遷移自由,而不是擔心你有多少;遷移代碼經過優化,可一次處理數百個數據,而且速度不會太慢。但是,最終你會想從幾百次遷移回到幾次,這就是擠壓進來的地方。

擠壓之前,您應該知道,「在Django 模型的相互依存關係可以變得非常複雜,擠壓可能會導致不運行遷移」,因此可能需要手動工作。

有關如何進行擠壓的詳細信息,請參閱文檔:https://docs.djangoproject.com/en/dev/topics/migrations/#squashing-migrations