2016-11-25 79 views
2

我正在Django中構建一個應用程序,它使用一個實時/使用中的數據庫。Django重建所有遷移

基本上由於應用開發的SQL數據庫發生了一些結構的變化,它是導致Django的問題,Django會嘗試遷移應用到已經存在的數據庫。例如:

在Django應用程序我標誌着email列作爲唯一這是基於細微開發數據庫上。然而,主數據庫現在總是有一個表格變化,將email列標記爲唯一。 Django正在與已經存在的這個獨特的關鍵戰鬥。

那麼是否有可能清除所有Django遷移,並使其與更新的SQL數據庫結構相比再​​次進行遷移?

+0

您必須選擇是否要Django管理您的數據庫。如果你想對db進行你自己的修改,並讓Django在之後採用修改,而不是Django改變數據庫本身,可以考慮使用['managed = False'](https://docs.djangoproject.com/en/1.10/ref/models/options /#託管)。 – knbk

回答

1

如果你的模型是非常出與數據庫同步的,最簡單的方法可能是使用inspectdb從頭開始重建您的模型。

如果您的模型已經非常接近數據庫,那麼首先要確保您的模型與數據庫完全匹配。你可以使用django-extensions的sqldiff這個。

一旦你的Django模型匹配您的數據庫,請按照this answer基於現有的數據庫架構重新創建遷移。

+0

我的設置的問題並不是所有的數據庫表都被網站使用,並且大部分數據庫都被外部應用程序使用。所以我不能只檢查或做一個sqldiff。我可以刪除所有遷移並重新創建連接到更新的數據庫結構的遷移嗎? – Chaos

+0

@bmazoka關鍵在於您在數據庫中使用的表格和應用程序的模型需要完全相同。一種選擇是在本地計算機上獲取數據庫的副本並刪除任何未使用的表。然後,您可以使用上述步驟創建您的遷移。 – YPCrumble

+0

啊我明白了。如果我刪除了所有遷移文件,Django是否能夠重新制作遷移?看起來像更簡單的解決方案。如果我根據當前結構製作模型,我會失去對模型本身所做的所有更改以及我必須做的自定義事情。 – Chaos