2010-09-20 106 views
0

我更喜歡在Django中手動遷移我的表。因爲使用自動化工具將我置於一個我看不到影響的地方。有了影響,我的意思是數據庫與我的模型同步所需的時間。下面是一個簡單的例子:django手動數據庫遷移

class User(models.Model): 
    first_name = CharField(..) 

比方說,我想補充一點:

class User(models.Model): 
     first_name = CharField(..) 
     last_name = CharField(..) 

我會按照我的生產服務器中的下列步驟操作:

  1. 禁用網站的流量。
  2. 手動連接到您的數據庫服務器,讓我們說MySQL並向名爲last_name的用戶表添加一個字段(確保它與爲新模型生成的SQL同步)
  3. 更新您的模型。
  4. 上傳新文件,重新啓動流量。

我對這個方案的兩個問題:

  1. 這是爲在Django手動分貝遷移首選/可以接受的方式?
  2. 如果我只是用SQL手動向用戶表添加一個具有特定默認值的字段,但不更新模型,我還會得到DatabaseIntegrity異常嗎?

由於提前,

回答

0

這是Django手動數據庫遷移的首選/可接受的方式嗎?

我會回答沒有。正如@Mike所說,Django擁有一個可靠和相當通用的遷移工具生態系統,其中最突出的是南部。 @邁克的答案有詳細的權利。

要回答你的第二個問題:

如果我只是一個特定的默認值由SQL手動添加一個字段,用戶表,但不更新模型,將我仍然得到DatabaseIntegrity異常?

不可以。您的模型將繼續正常工作。當然,如果你想用Django的ORM對新字段做些什麼,你最好將它們添加到模型類中。

這樣做的副作用是您可以通過選擇選擇要在模型中使用的字段來遷移遺留數據庫表。

7

與所有的架構遷移工具,如south,也有明確的定義你的模型是如何被遷移的方式。使用工具如這個的好處是:

  • 你的遷移存儲在你的版本控制系統
  • 有文件規定的程序回滾架構遷移
  • 如果其他開發商加入你的項目,你可以將該人員引用到南方文檔中,而不是解釋您自己的hacky解決方案來記錄模式遷移。

我想我應該強調一點的位置:雖然南方有自動遷移工具,你不必使用自動遷移,如果你正在使用南

+0

+1使用南... – hughdbrown 2010-09-20 16:22:30