我在生產(其中包含大量的數據)有一個postgres生產數據庫。現在我需要修改tg-app的模型,將一些新表添加到數據庫中。如何更新turbogears應用程序生產數據庫
我該怎麼做?我正在使用sqlAlchemy。
我在生產(其中包含大量的數據)有一個postgres生產數據庫。現在我需要修改tg-app的模型,將一些新表添加到數據庫中。如何更新turbogears應用程序生產數據庫
我該怎麼做?我正在使用sqlAlchemy。
這總是有效,需要一點思考 - 只有耐心。
進行備份。
其實做一個備份。每個人都跳過第1步,認爲他們有備份,但他們永遠無法找到它或使用它。不要相信任何無法從中恢復的備份。
創建一個新的數據庫模式。
從新模式中從頭開始定義新結構。理想情況下,您將運行構建新架構的DDL腳本。沒有腳本來構建模式?創建一個並將其置於版本控制之下。
使用SA,您可以定義您的表格,並且可以爲您構建您的架構。這是理想的,因爲你的Python在版本控制下擁有你的模式。
移動數據。
a。對於沒有更改結構的表,使用簡單的INSERT/SELECT語句將數據從舊模式移動到新模式。
b。對於確實改變了結構的表,開發INSERT/SELECT腳本將數據從舊數據移動到新數據。通常,這可以是每個新表的單個SQL語句。在某些情況下,它必須是一個具有兩個打開連接的Python循環。
c。對於新表格,加載數據。
停止使用舊的模式。開始使用新的模式。找到所有使用舊模式並修復配置的程序。
沒有應用程序列表?做一個。認真 - 這很重要。
應用程序具有硬編碼的數據庫配置?解決這個問題,當你在它的時候。要麼創建一個通用的配置文件,要麼使用一些常見的環境變量,或者(a)確保一致性,(b)集中「生產」的概念。
你可以在你做大手術時做這種手術。除了提取數據之外,它不會觸及舊數據庫。
如果你只是添加表,並沒有修改任何已在其現有的數據表,你可以簡單地添加新的SQLAlchemy的表定義到model.py,並運行:
tg-admin sql create
這不會覆蓋您現有的任何表格。
對於模式遷移,您可以看看http://code.google.com/p/sqlalchemy-migrate/,儘管我自己還沒有使用它。
始終在遷移活動之前備份生產數據庫。
最簡單的方法是簡單地編寫一些sql更新腳本並使用它們來更新數據庫。顯然,這是一個相當低級的(原樣)方法。
如果你認爲你會做很多事情,並希望堅持Python,你可能想看看sqlalchemy-migrate。在最近的Python雜誌中有一篇關於它的文章。
我會同意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版本的版本,太)。
OP提到他擁有「大量數據」:如果選擇/插入循環意味着數小時或數天的緩慢,宕機或數據丟失,則可能導致選擇/插入循環不切實際。 相反,您是否可以從新配置的主配置複製到新配置的從配置? – 2008-12-24 00:15:19