今天有这样一个需求,需要把Sqlserver中的多张表中的不同字段的数据写入到Mysql表中对应的数据表中去。这个可以难为人了。自己想了一个办法使用python来操作两个数据库。python都能很好的支持两种数据库的操作。
首先我们需要相应的库:
1 2 | pymysql 操作mysql数据库 pymssql 操作sqlserver数据库 |
一 、安装相关库
首先我们需要安装以上两个包,安装命令分别为:
1 2 | pip install pymysql pip install pymssql |
二、建立相关python 文件
下面就上来我们的第一个实例。代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | import pymssql import time class MSSQL: """ 对pymssql的简单封装 使用该库时,需要在Sql Server Configuration Manager里面将TCP/IP协议开启 用法: """ def __init__(self,host,user,pwd,db): self.host = host self.user = user self.pwd = pwd self.db = db def __GetConnect(self): """ 得到连接信息 返回: conn.cursor() """ if not self.db: raise(NameError,"没有设置数据库信息") self.conn = pymssql.connect(host=self.host,user=self.user,password=self.pwd,database=self.db,charset="utf8") cur = self.conn.cursor() if not cur: raise(NameError,"连接数据库失败") else: return cur def ExecQuery(self,sql): """ 执行查询语句 返回的是一个包含tuple的list,list的元素是记录行,tuple的元素是每行记录的字段 """ cur = self.__GetConnect() cur.execute(sql) resList = cur.fetchall() #查询完毕后必须关闭连接 self.conn.close() return resList def ExecNonQuery(self,sql): """ 执行非查询语句 """ cur = self.__GetConnect() cur.execute(sql) self.conn.commit() self.conn.close() ## ## 调用案例 def main(): ms = MSSQL(host="localhost",user="sa",pwd="P@ssword",db="TP_TEST") sql = 'select T_JH.ID,T_JH.jhName,T_JHTemplate_SJ.TemplateID,T_JHTemplate_SJ.sjID,T_SJMB.sjName,T_JHTemplate.StartDate from T_JH LEFT JOIN T_JHTemplate on T_JH.ID = T_JHTemplate.JHId LEFT JOIN T_JHTemplate_SJ on T_JHTemplate_SJ.TemplateID = T_JHTemplate.Id LEFT JOIN T_SJMB on T_SJMB.Id = T_JHTemplate_SJ.sjID;' return ms.ExecQuery(sql) ################################# import pymysql # mysql连接 class connMySql(): def __init__(self,host,user,pwd,db,port): self.host = host self.user = user self.pwd = pwd self.db = db self.port = port # 执行插入数据函数 def insert_into_data(self,sql): db = pymysql.connect(host=self.host, user=self.user, password=self.pwd, db=self.db, port=self.port) cur = db.cursor() try: cur.execute(sql) # 提交 db.commit() except Exception as e: # 错误回滚 db.rollback() finally: db.close() def Changestamp(dt1): # datetime时间转为时间戳 Unixtime = time.mktime(time.strptime(dt1.strftime('%Y-%m-%d %H:%M:%S'), '%Y-%m-%d %H:%M:%S')) return Unixtime if __name__ == '__main__': # 获取sqlserver数据 data = main() # 链接mysql db = connMySql(host='192.168.0.147',user='test',pwd='123456',db='missionplan',port=3306) for da in data: d1 = da[0] d2 = da[1] d3 = da[2] d4 = da[3] d5 = da[4] d6 = da[5] if d6 != None: d7 =Changestamp(d6) sql = '''insert into planout(PlanId,PlanName,PlanVersion,EventId,EventName,StartTime) VALUES ('%s','%s','%s','%s','%s','%s');''' %(d1,d2,d3,d4,d5,d7) db.insert_into_data(sql) else: sql = '''insert into planout(PlanId,PlanName,PlanVersion,EventId,EventName,StartTime) VALUES ('%s','%s','%s','%s','%s',NULL);''' %(d1,d2,d3,d4,d5) db.insert_into_data(sql) print('数据插入成功') |
到此,一个完整的从sqlserver中查询初需要的数据,在完成mysql数据库的写入操作就完成了。
原创出品,喜欢可以收藏转载哦!!!
作者:lizhonglin
github: https://github.com/Leezhonglin/