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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_33196814/article/details/86308057

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

猜你喜欢

转载自blog.csdn.net/qq_33196814/article/details/86308057