Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como verificar se 'o servidor MySQL desapareceu'


Você pode capturar a exceção OperationalError e reconectar.
from MySQLdb import OperationalError

try:
    my_sql_operation()
except OperationalError as e:
    #do what you want to do on the error
    reconnect()
    print e

Se você deseja verificar explicitamente se a conexão foi interrompida antes de executar as consultas, você pode executar uma consulta de teste para verificar se a exceção ocorre.

Não tenho certeza em quais outros casos OperationalError é gerado. Mas se você quiser pegar apenas o MySQL server has gone away erro, você pode fazer algo assim.
from MySQLdb import OperationalError

try:
    my_sql_operation()
except OperationalError as e:
    if 'MySQL server has gone away' in str(e):
        #do what you want to do on the error
        reconnect()
        print e
    else:
        raise e()

ele detectará apenas o erro 'fora' e permitirá que exceções OperationalError sejam levantadas devido a outros motivos.

ATUALIZAÇÃO

Como eu disse no comentário minha função de consulta seria assim:
def fetch_data(query):
    try:
        cursor = conn.Cursor()
        cursor.execute(query)
        return cursor.fetchall()
    except OperationalError as e:
        reconnect()
        print 'reconnecting and trying again...'
        fetch_data(query)

Isso é apenas um exemplo e pode não ser adequado para o seu caso. O ponto que estou tentando fazer é que é melhor ter funções diferentes para coisas diferentes, para que você possa lidar com essas situações facilmente.