Python: MySQL: lidando com tempos limite
Eu estou usando Python e mySQL, e há um longo atraso entre as consultas. Como resultado, eu recebo um erro 'MySQL connection has away', ou seja, wait_timeout foi excedido.
Isto foi discutido, e. emGraciosamente manipulação "MySQL foi embora"
mas isso não responde especificamente à minha consulta.
Então, minha abordagem para lidar com isso - eu envolvi todas as minhas instruções sql executar em um método como -
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()
Eu tenho vários lugares no código que chama essa consulta. A coisa é, eu também tenho vários cursores, então as invocações do método parecem
self.__execute_sql(sql,self.cursor_a)
self.__execute_sql(sql,self.cursor_b)
e assim por diante
Eu preciso de uma maneira de re-executar a consulta depois que o banco de dados foi iniciado. Eu poderia envolver as chamadas em uma declaração if, e re-executar assim seria
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
e depois
if (self.__execute_sql(sql,self.cursor_a) == 0):
self.__execute_sql(sql,self.cursor_a)
Mas isso é desajeitado. Existe uma maneira melhor de fazer isso? Obrigado!!!