提示错误信息:
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
还没有留言,还不快点抢沙发?