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')

 

 

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...