簡體   English   中英

Python腳本在兩個不同數據庫中比較同一表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM