【发布时间】:2012-11-26 16:01:26
【问题描述】:
我正在使用 Python 和 mySQL,查询之间有很长的延迟。结果,我收到“MySQL 连接已消失”错误,即已超出 wait_timeout。
这已经被讨论过,例如在 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)
但这很笨拙。有一个更好的方法吗? 谢谢!!!
【问题讨论】: