[英]Python script to diff same table in two different databases
我將要編寫一個python腳本來幫助我在同一應用程序的不同版本之間遷移數據。
在開始之前,我想知道是否存在執行類似操作的腳本或模塊,並且我可以使用或至少用作滾動自己的起點。 想法是在特定表之間對數據進行差異化,然后將差異存儲為要應用於早期版本數據庫的SQL INSERT語句。
注意:面對模式更改,此腳本不可靠
通常,邏輯將類似於
def diff_table(table1, table2):
# return all rows in table 2 that are not in table1
pass
def persist_rows_tofile(rows, tablename):
# save rows to file
pass
dbnames=('db.v1', 'db.v2')
tables_to_process = ('foo', 'foobar')
for table in tables_to_process:
table1 = dbnames[0]+'.'+table
table2 = dbnames[1]+'.'+table
rows = diff_table(table1, table2)
if len(rows):
persist_rows_tofile(rows, table)
這是編寫此類腳本的好方法還是可以改進? 我懷疑可以通過緩存數據庫連接等(由於我對SqlAlchemy等不太熟悉,所以將其遺漏了)來改進。
關於如何添加SqlAlchemy以及總體上改進此類腳本的任何技巧?
今天早些時候我遇到了同樣的問題,我發現本指南對於復制數據庫確實很有幫助。
http://www.tylerlesmann.com/2009/apr/27/copying-databases-across-platforms-sqlalchemy/
為了您的需要,我懷疑您實際上需要比較兩個表。 merge()是神奇的。
要在兩個數據庫之間移動數據,請使用pg_comparator 。 就像diff和sql補丁一樣! 您可以使用它來交換列的順序,但是如果需要拆分或合並列,則需要使用其他內容。
我還使用它異步復制數據庫。 cron作業每五分鍾運行一次,並將“主”數據庫上的所有更改推送到“從”數據庫上。 如果只需要分配一個表,或者不是每個表都包含所有列,則特別方便。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.