微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python3 mysql错误 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,room_id) VALUES(%s,%s,%s)"
            self.cur.execute(sql,(time,room_id))
if __name__ == '__main__':

    db = DataBase()
    db.insert_visitor_info('2019-03-31 17:57:08','8b417cb51268','312')

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐