提示错误信息:

pymysql.err.InterfaceError: (0, '')

数据库断开原因:

第一种:因为数据库的默认wait_timeout=28800,单位为s,换算为小时则是8小时(和mysql设置信息有关系)。也就是我的服务一旦启动,那么在8个小时之后就会被mysql自动断开。

当你有一个数据库关闭调用,然后在不创建新连接的情况下尝试访问数据库。试着找出你是否在无意中关闭了与数据库的连接。\

当你调用db.close()关闭连接数据库,然后在连接数据库,你会得到这个错误。

解决思路

需要做连接存活处理

参考pymysql提供接口Conncetion.ping()

    def ping(self, reconnect=True):
        """Check if the server is alive"""
        if self._sock is None:
            if reconnect:
                self.connect()
                reconnect = False
            else:
                raise err.Error("Already closed")
        try:
            self._execute_command(COMMAND.COM_PING, "")
            return self._read_ok_packet()
        except Exception:
            if reconnect:
                self.connect()
                return self.ping(False)
            else:
                raise

具体代码:

class DataSource(object):

    def __init__(self):
        self.conn = self.to_connect()

    def __del__(self):
        self.conn.close()

    def to_connect(self):
        return pymysql.connections.Connection(params)

    def is_connected(self):
        """Check if the server is alive"""
        try:
            self.conn.ping(reconnect=True)
            print "db is connecting"
        except:
            traceback.print_exc()
            self.conn = self.to_connect()
            print "db reconnect"

参考连接:

https://blog.csdn.net/u013948858/article/details/88343426

https://stackoverflow.com/questions/6650940/interfaceerror-0

本文地址: http://chenxm.cc/article/1190.html
版权声明: 本文为原创文章,版权归  陈新明  所有,欢迎分享本文,转载请保留出处!
上一篇: python 笛卡尔坐标(直角坐标)转换为像素坐标(图像坐标)
下一篇: python django.db.utils.InterfaceError: (0, '')解决思路
发表评论

还没有留言,还不快点抢沙发?