• pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query')


    pymysql错误:

    pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query')
    pymysql.err.InterfaceError: (0, '')
    

    错误原因:

    MySQL持久化链接保持时间为8小时(28800秒),过期后断开连。如果数据库没有新建连接,则会报此错。

    mysql> SHOW SESSION VARIABLES LIKE 'wait_timeout';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | wait_timeout  | 28800 |
    +---------------+-------+
    

    解决思路:

    调用前判断连接是否有效,如果有效继续,无效创建连接。

    class DataBase():
        """数据库类"""
    
        def __init__(self, host='localhost', user='root', pw='password', db='test'):
            self.con = pymysql.connect(host, user, pw, db)
            self.cur = self.con.cursor()
    
    # 方法1:
        def _reCon (self): 
            """ MySQLdb.OperationalError异常"""
            # self.con.close() 
            while True:
                try: 
                    self.con.ping()
                    break
                except OperationalError:
                    self.con.ping(True)
    
    # 方法2:
        def _reConn (self,num=28800,stime=3): 
            """
            校验数据库连接是否异常
            num:8小时
            stime:间隔3秒重连
            """
            _number = 0
            _status = True
            while _status and _number <= num:
                try:
                    self.con.ping()         #cping 校验连接是否异常
                    _status = False
                except:
                    if self.con == True: #重新连接,成功退出
                        _status = False
                        break
                    _number +=1
                    time.sleep(stime)   #连接不成功,休眠3秒钟,继续循环,直到循环8小时
                    
        def insert_visitor_info(self, time, device_id, room_id):
            """插入访客请求信息"""
            self._reCon()
            # self._reConn()
            with self.con:
                sql = "INSERT INTO visitor(time,device_id,room_id) VALUES(%s,%s,%s)"
                self.cur.execute(sql, (time, device_id, room_id))
    if __name__ == '__main__':
    
        db = DataBase()
        db.insert_visitor_info('2019-03-31 17:57:08','8b417cb51268','312')
    

    鸣谢地址:

  • 相关阅读:
    给任意多个链表然后要合并成一个
    hdu5967数学找规律+逆元
    poj2125最小点权覆盖+找一个割集
    poj3308 最小点权覆盖
    poj2987 最大闭合权子图基础题
    poj2699 转化为可行性判定问题+二分枚举+最大流
    判断割是否唯一zoj2587
    快排优化
    jvm垃圾收集器
    三次握手与四次挥手
  • 原文地址:https://www.cnblogs.com/xuwei1/p/10820516.html
Copyright © 2020-2023  润新知