我正在使用Python和mySQL,并且查询之间有很长时间的滞后。结果,我得到一个'MySQL连接已经消失'的错误,即wait_timeout超出。Python:MySQL:处理超时
这已经在例如在 Gracefully handling "MySQL has gone away"
但这并不具体回答我的查询。
所以我的方法来处理这个 - 我已经包裹我所有的SQL的方法执行语句 -
def __execute_sql(self,sql,cursor):
try:
cursor.execute(sql)
except MySQLdb.OperationalError, e:
if e[0] == 2006:
self.logger.do_logging('info','DB', "%s : Restarting db" %(e))
self.start_database()
我在调用该查询的代码的几个地方。关键是,我也有几个游标,因此该方法调用看起来喜欢 -
self.__execute_sql(sql,self.cursor_a)
self.__execute_sql(sql,self.cursor_b)
等
我需要一种方法分贝启动后优雅地重新执行查询。 if语句我可以换的电话在,并重新执行所以这将是
def __execute_sql(self,sql,cursor):
try:
cursor.execute(sql)
return 1
except MySQLdb.OperationalError, e:
if e[0] == 2006:
self.logger.do_logging('info','DB', "%s : Restarting db" %(e))
self.start_database()
return 0
然后
if (self.__execute_sql(sql,self.cursor_a) == 0):
self.__execute_sql(sql,self.cursor_a)
但这是笨重。有一个更好的方法吗? 谢谢!
运行查询被认为是反模式是浪费资源和不可靠之前执行ping:https://www.percona.com/blog/2010/05/05/checking-for-a-实时数据库连接认为有害/ –