我正在使用 Python 和 mySQL,查询之间有很长的延迟。结果,我收到一个“MySQL 连接已消失”错误,即超出了 wait_timeout。
但这并没有具体回答我的查询。
所以我处理这个问题的方法 - 我已经将我所有的 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)
但这很笨拙。有一个更好的方法吗?谢谢!!!