2009-07-12 77 views
4

如果我改變Django模型中的字段,我該如何將它與數據庫表同步?我是否需要在數據庫上手動執行該操作,還是有工具可以幫助處理該流程?Django模型同步表

回答

6

唉,Django不支持任何簡單的解決方案。

唯一Django會爲你做的,是符合您的新模式,新表重新啓動數據庫:

$ #DON'T DO THIS UNLESS YOU CAN AFFORD TO LOSE ALL YOUR DATA! 
$ python PROJECT_DIR/manage.py syncdb 

下一個選項是使用不同的SQL *選項manage.py看django會如何將當前模型與數據庫相匹配,然後發佈自己的ALTER TABLE命令以使所有內容正常工作。當然,這是容易出錯和困難的。

真正的解決方案是使用數據庫遷移工具,如south來生成遷移代碼。

這是一個similar question,討論django的各種數據庫遷移選項。

+2

南方肯定是走的路 – Apreche 2009-07-12 04:31:54

+0

的確,南方是一個真正的好工具! – SingleNegationElimination 2009-07-12 04:56:46

3

Django Evolution可以提供幫助,但最好的選擇其實是提前規劃出您的模式,或者手動進行簡單的修改。或者,願意通過刪除表格並重新同步來烘烤測試數據。

2

Django不提供此開箱即用。

以下是來自Django Book doing it by hand的一些信息(請參閱更改數據庫模式)。這適用於直接簡單的更改。

長期來看,您可能會想要使用遷移工具。主要有三個選項:

編輯:翻翻由TokenMacGuy鏈接的問題,爲了完整起見,我會再添加兩個:

0

只是拋出一個額外的見解 - dmigrations是相當不錯的,明確的使用,但我要說南是你最好的選擇。再次,它很容易進入,但它更強大,並且支持更多的數據庫後端,而不僅僅是MySQL。它甚至處理MSSQL,如果這是你的東西

4

似乎無法添加評論標記的答案,可能是因爲我沒有足夠的代表(如果所以告訴我,所以雖然很好)。

反正只是想補充的是,在回答後,我認爲這是錯誤的關於執行syncdb - 執行syncdb不觸摸表一旦被創建,並在其中有數據。你應該通過調用其數據丟失

我相信海報是指復位命令來代替,這確實導致數據丟失(否則,你怎麼可以添加新表新的應用程序嗎?) - 它將刪除表並重新創建它,因此它將具有所有最新的模型更改。