跨網絡,跨數據庫查詢插入數據

 背景:部署的外網的生產環境因爲數據庫配置致使部分數據沒有插入成功,從內網測試環境查詢相關數據插入到生產環境數據庫。生產環境數據庫只能經過SSH鏈接進行訪問,因此先把須要查詢更新的數據導出到文本里面,從內網數據庫查詢到後再進行插入操做。python

#coding=utf-8

import MySQLdb
from sshtunnel import SSHTunnelForwarder 

sql1='select videoType from t_video_type_relevance where videoId IN\
    (select videoId from t_video where videoName=%s)'
SQL2='INSERT INTO t_video_type_relevance_copy(videoType,videoId) values(%s,%d)'

db1 = MySQLdb.connect("192.168.1.246","root","123456","dbname" )
cursor1 = db1.cursor()
cursor1.execute('SET NAMES UTF8') #設置鏈接編碼格式,應對中文問題

data1=[]
data2=[]
with open("c://Users//huangning//Desktop//MISSING.txt",'r') as f:
    lines = f.readlines()
    for line in lines:
        videoId = int(line.split('AB')[0].strip('"'))
        videoName = line.split('AB')[1]
        #print videoId,videoName
        
        
        try:
            cursor1.execute(sql1%videoName)
            result= cursor1.fetchone()[0]
            data = (result,videoId)
            data1.append(data)
        except Exception:
            data2.append(videoId)
            print 'insert not success : %d'%videoId
        
#print data1
#print data2

with SSHTunnelForwarder(('x.x.x.x', 22),    #B機器的配置  
         ssh_password="pwd",  
         ssh_username="username",  
         remote_bind_address=('10.254.0.12', 3306)) as server:  #A機器的配置  
  
        conn = MySQLdb.connect(host='127.0.0.1',              #此處必須是是127.0.0.1  
                           port=server.local_bind_port,  
                           user='username',  
                           passwd='pwd',  
                           db='dbname')
        cursor2 = conn.cursor()
        cursor2.execute('SET NAMES UTF8')
        for item in data1:
            try:
                cursor2.execute(SQL2%item)
                conn.commit()
            except:
                
                conn.rollback()
相關文章
相關標籤/搜索