2008-11-19 28 views

回答

1

這總是有效,需要一點思考 - 只有耐心。

  1. 進行備份。

  2. 其實做一個備份。每個人都跳過第1步,認爲他們有備份,但他們永遠無法找到它或使用它。不要相信任何無法從中恢復的備份。

  3. 創建一個新的數據庫模式。

  4. 從新模式中從頭開始定義新結構。理想情況下,您將運行構建新架構的DDL腳本。沒有腳本來構建模式?創建一個並將其置於版本控制之下。

    使用SA,您可以定義您的表格,並且可以爲您構建您的架構。這是理想的,因爲你的Python在版本控制下擁有你的模式。

  5. 移動數據。

    a。對於沒有更改結構的表,使用簡單的INSERT/SELECT語句將數據從舊模式移動到新模式。

    b。對於確實改變了結構的表,開發INSERT/SELECT腳本將數據從舊數據移動到新數據。通常,這可以是每個新表的單個SQL語句。在某些情況下,它必須是一個具有兩個打開連接的Python循環。

    c。對於新表格,加載數據。

  6. 停止使用舊的模式。開始使用新的模式。找到所有使用舊模式並修復配置的程序。

    沒有應用程序列表?做一個。認真 - 這很重要。

    應用程序具有硬編碼的數據庫配置?解決這個問題,當你在它的時候。要麼創建一個通用的配置文件,要麼使用一些常見的環境變量,或者(a)確保一致性,(b)集中「生產」的概念。

你可以在你做大手術時做這種手術。除了提取數據之外,它不會觸及舊數據庫。

+0

OP提到他擁有「大量數據」:如果選擇/插入循環意味着數小時或數天的緩慢,宕機或數據丟失,則可能導致選擇/插入循環不切實際。 相反,您是否可以從新配置的主配置複製到新配置的從配置? – 2008-12-24 00:15:19

0

如果你只是添加表,並沒有修改任何已在其現有的數據表,你可以簡單地添加新的SQLAlchemy的表定義到model.py,並運行:

tg-admin sql create 

這不會覆蓋您現有的任何表格。

對於模式遷移,您可以看看http://code.google.com/p/sqlalchemy-migrate/,儘管我自己還沒有使用它。

始終在遷移活動之前備份生產數據庫。

1

最簡單的方法是簡單地編寫一些sql更新腳本並使用它們來更新數據庫。顯然,這是一個相當低級的(原樣)方法。

如果你認爲你會做很多事情,並希望堅持Python,你可能想看看sqlalchemy-migrate。在最近的Python雜誌中有一篇關於它的文章。

1

我會同意John。對於大型數據庫來說,單步選擇和插入將不實用,並且設置複製或多通差分SELECT/INSERT可能會更困難並且更容易出錯。

就我個人而言,我使用SQLAlchemy作爲TurboGears下的ORM。要做到架構遷移我運行:

tg-admin sql status 

要看到生活和發展模式的差異,然後手動寫(和版本控制)DDL腳本進行必要的更改。

對於使用SQLAlchemy的獨立的(即不TurboGears中下),該sql status功能是相當簡單,可在TG源在這裏找到:http://svn.turbogears.org/branches/1.1/turbogears/command/sacommand.py(有在1.0分支老的Python/SA版本的版本,太)。

相關問題