背景:部署的外網的生產環境因爲數據庫配置致使部分數據沒有插入成功,從內網測試環境查詢相關數據插入到生產環境數據庫。生產環境數據庫只能經過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()