Mysql
 sql >> Database >  >> RDS >> Mysql

Come verificare se "il server MySQL è andato via"

Puoi rilevare l'eccezione OperationalError e riconnetterti.

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 desideri verificare esplicitamente se la connessione è interrotta prima di eseguire le query, puoi eseguire una query di prova per verificare se si verifica l'eccezione.

Non sono sicuro in quali altri casi viene sollevato OperationalError. Ma se vuoi catturare solo il MySQL server has gone away errore, puoi fare qualcosa del genere.

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()

rileverà solo l'errore "andato via" e consentirà di sollevare eccezioni OperationalError per altri motivi.

AGGIORNAMENTO

Come ho detto nel commento, la mia funzione di interrogazione sarebbe questa:

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)

Questo è solo un esempio e potrebbe non essere adatto al tuo caso. Il punto che sto cercando di sottolineare è che è meglio avere funzioni diverse per cose diverse in modo da poter gestire facilmente queste situazioni.