2010-08-19 25 views
1

我正在使用兩個數據庫,即本地版本和服務器上的版本。服務器是最新的版本,而不是重新複製從服務器到本地版本的所有表上的所有值,Python + MySQLDB針對兩個相同數據庫的批量插入/更新命令

我想輸入每個表,並且只從服務器插入/更新已更改的值,並將這些值複製到我的本地版本。

有沒有一些簡單的方法來處理這種情況?某種批量插入/更新? Googl'ing的答案是行不通的,我已經試過我的手編碼之一,但我開始糾纏在錯誤處理..
我使用Python和MySQLDB ...感謝您的任何洞察力
史蒂夫

回答

0

如果您的所有表的記錄有時間戳,您可以識別‘已經在服務器中改變了值’ - 否則,目前還不清楚如何你打算做那部分(其中有無關插入或更新,這是一個「選擇正確的東西」的問題)。

一旦你有所有重要的價值,somecursor.executemany將讓你把它們全部作爲一個批次應用。根據您的索引可能更快地把它們放到一個沒有索引的輔助臨時表,然後插入/更新的所有表進入真實的,當然是後者(丟棄AUX/TEMP一個前)一個somecursor.execute

通過使用一個(或幾個)線程執行選擇並將結果放到Queue.Queue以及幾個工作線程可將從隊列中拔出的結果應用到內部/本地服務器。 (閱讀和寫作線程的最佳平衡最好通過嘗試一些和測量來獲得 - 寫作本身比讀取要慢,但是您的本地服務器的帶寬可能高於另一個,因此很難預測)。

但是,除非您有確實有一個策略來標識「服務器中已更改的值」,所以這並不實際,因此,從這一點開始討論關於「下游」的詳細信息並不一定非常有用鑑定。