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!!!

questionAnswers(3)

yourAnswerToTheQuestion