天天看點

python實作mysql跨庫的表結構和表資料自動同步

準備對某個資料庫重要的資料字典表進行變更監控。首先需要更具傳入的來源表 進行目标表的自動建立和表資料的同步。

由于代碼在内網編寫 無法拷出 這裡給出核心代碼:

查詢建立表結構

import pymql
#查詢所需同步的表的建立語句 
create_sql  = show create table tablename
#連接配接需要建立表的資料庫  執行建立表語句  生成相同表結構的表
excute(create_sql)
           

自動同步表資料

#查詢舊表或者新表的schema資訊 擷取表的列數
q_res = select count(*)from information_schema.COLUMNS where table_name =tablename
##生成對應列數的一行插入sql語句
str_str = '%s,'*(int(q_res[0][0]-1))+'%s'
insertsql = (insert into table_name values %s) %str_str
##生成來自舊表的需要同步的所有資料的fetchall結果
insert_data = select * form table_name
##調用pymysq的excutemany()方法 傳入sql和data參數
excutemany(insertsql,insert_data)
           

此外 還可通過對表schema資訊和表資料的比對來檢視是否對舊資料表進行了修改 達到監控表資料的目的

這裡可以采用集合對象來進行資料比對,非常友善和快捷

對應pymysql查詢傳回的fetchall()資料 可直接使用

set(search_result) #進行集合對象的轉換
           

使用

(set_a | set_b) - (set_a&set_b)
           

來擷取兩表的不同資料的行資料的集合

也可查詢schemainformation中的表的中繼資料資訊來比對結構是否轉變