用python進行資料庫資料遷移

orclwujian發表於2016-12-16
現要將mysql資料庫上每5秒查詢一次結果並覆蓋寫入到postgresql中去,
實現的方法有很多:
一、用shell,將查詢出來的資料放到中間文字,再load到pg中。這種方法資料要落地,而且這臺伺服器上必須要安裝mysql和pg,才能遠端連線。
二、用kettle實現,在linux上使用較麻煩,殺雞焉用牛刀。
三、使用python,linux基本都自帶,需要安裝MySQLdb和psycopg2模組。
......
這次主要介紹python實現方法
因為涉及到兩種資料庫,先安裝MySQLdb和psycopg2模組。
安裝psycopg2模組可以用yum安裝
[root@trcloud-gtt-dw python]# yum install python-psycopg2


程式碼:
#匯入MySQLdb和psycopg2模組
import MySQLdb 
import psycopg2
#建立mysql連線,透過cursor獲取遊標,用execute獲取查詢結果
conn=MySQLdb.connect(host='192.168.129.15',port=3306,user='root',passwd='123456')
cursor1=conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)
cursor1.execute("select id,name from test.fader where id=1")
rows=cursor1.fetchall()
#如果sql語句很長影響指令碼的排版時,可以將sql寫到檔案中,透過讀取檔案執行。

#file=open("/root/python/root/python/update_home_data.txt")
#sql=file.read()
#cursor1.execute("%s"%(sql))
#file.close()
#rows=cursor1.fetchall()
#建立pg連線,透過cursor獲取遊標,先清空目標表
conn2 = psycopg2.connect(database="edw", user="gpadmin", password="123456", host="172.30.248.10", port="5432") cursor2 = conn2.cursor() cursor2.execute("truncate work_test.fader"

#迴圈mysql中獲取的結果,並插入到pg中
for list in rows:
    id=list['id']
    name=list['name']
    cursor2.execute("insert into work_test.fader(id,name) values('%s','%s') "%(id,name))


cursor1.close()
cursor2.close()
conn.commit()
conn2.commit()
conn.close()
conn2.close()

再使用crontab每5秒執行一次
注:這種方法只適合小數量的跨庫資料準實時傳輸,因為插入的時候是一條一條的插入,不是批次插入會有大量的commit操作。如果資料量大會對關係型資料庫的效能有影響(這和關係型資料庫操作日誌快取落盤機制有關,在這裡就不過多闡述)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29989552/viewspace-2130801/,如需轉載,請註明出處,否則將追究法律責任。

相關文章