python操作sqlserver的数据到mysql的实例

​ 今天有这样一个需求,需要把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/

blog: https://leezhonglin.github.io/

-------------本文结束 感谢您的阅读-------------