python连接 sql server数据库报错0,b'unknown error

写了一个将接收到的数据插入数据库的python脚本,平常获取,插入数据正常,但是现在发现运行了1天或者几天之后会报错,报错之后无法插入新数据,以下是源码


# 引入socket模块
import socket
# 引入线程模块
import threading
# 引入mssql模块
import pymssql
from pymssql import _mssql
from pymssql import _pymssql
import uuid
import decimal
# 引入正则表达式模块
import re
# 引入日期时间模块
import datetime
import time
from multiprocessing import Lock

# 创建socket服务
class TCPServer(threading.Thread):
    """tcp服务器"""

    def __init__(self, ip, port, conn, cursor):
        super().__init__()
        self.conn = conn
        self.cursor = cursor
        # 1、创建socket对象
        self.tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # 2、设置端口地址复用
        self.tcp_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
        # 3、绑定地址端口
        self.tcp_server.bind((ip, port))
        # 4、设置被动
        self.tcp_server.listen(128)
        self.__lock = Lock()

    def run(self):
        while True:
            self.__lock.acquire()
            # 1、获取客户端发来的连接请求 得到客户端对象和地址
            client, addr = self.tcp_server.accept()
            # 2、开启一个线程 处理当前收到的客户端对象
            HandleClient(client, addr, self.conn, self.cursor).start()
            self.__lock.release()
            time.sleep(0.1)

    def __del__(self):
        print('服务器结束')
        self.tcp_server.close()

# 接收并处理客户端数据
class HandleClient(threading.Thread):
    def __init__(self, client, addr, conn, cursor):
        super().__init__()
        self.client = client
        self.addr = addr
        self.conn = conn
        self.cursor = cursor
        

    def run(self):
        while True:
            # 1、接收信息            
            data1 = self.client.recv(1024)
            # 2、解码
            data2 = data1.decode('gbk')
            now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
            print(now, '收到来自%s的信息%s' % (self.addr, data2))
            
            if not data2:
                break
            # 3、自动回复  把原数据返回
            self.client.send(data1)
            # 4、字符串数据提取
            hextodec = lambda s:int(s,16)
            tuple_1 = [t(s) for t,s in zip((int,str,str,str,str,float,str,float,float,float,int,float,float,float,hextodec),re.search('^\$(\d+),(\w+),(\d{4}-\d{2}-\d{2}),(\d{2}:\d{2}:[\d.]+),(\w+),([-?\d.]+),(\w+),([-?\d.]+),([-?\d.]+),([-?\d.]+),(-?\d+),([-?\d.]+),([-?\d.]+),([-?\d.]+)\*([0-9a-fA-F]+)\r\n$',data2).groups())]
            tuple_2 = tuple(tuple_1)
            print('Extracting data is ok!')
            # 5、计算理论校验值
            checksum = 0
            for i in data2:
                if i == '*':
                    break;
                if i != '$':
                    checksum = checksum ^ ord(i)
            # 6、比较理论校验值和实际校验值
            if checksum == tuple_1[len(tuple_1) - 1]:
                print('Checksum is ok!')
                # 4、往数据库表中插入数据                
                self.cursor.executemany("INSERT INTO GpsInfo VALUES (%d, %s, %s, %s, %s, %s, %s, %s, %s, %s, %d, %s, %s, %s, %d)", [tuple_2])
                # 如果连接时没有设置autocommit为True的话,必须主动调用commit() 来保存更改。
                #self.conn.commit()
                print('Insering data is ok!')               

                    
            time.sleep(0.1)

    def __del__(self):
        print('客户服务结束')
        self.client.close()


if __name__ == '__main__':
    
    # sql服务器名称
    serverName = '127.0.0.1:1433'
    # 登陆用户名和密码
    userName = 'sa'
    passWord = '*****'
    # 数据库名称
    dbName = '*****'
    # tcp通信地址
    socketIp = '******'
    # tcp通信端口
    socketPort = ****
    
    # 1、建立连接并获取cursor
    print('Start to connect server...')
    conn = pymssql.connect(serverName , userName , passWord, dbName,autocommit=True)
    cursor = conn.cursor()
    print('Connecting server is ok!\r\n')
    
    # 2、创建socket服务并等待客户端建立tcp连接
    tcp_server = TCPServer(socketIp, socketPort, conn, cursor)
    tcp_server.start()

下图是长时间运行后的报错信息

img

求怎么修改代码可以避免出现问题,谢谢啦

数据库端口没有开