Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment vérifier si 'le serveur MySQL a disparu'

Vous pouvez intercepter l'exception OperationalError et vous reconnecter.

from MySQLdb import OperationalError

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

Si vous souhaitez explicitement vérifier si la connexion est interrompue avant d'exécuter des requêtes, vous pouvez exécuter une requête test pour vérifier si l'exception se produit.

Je ne sais pas dans quels autres cas OperationalError est déclenché. Mais si vous voulez attraper uniquement le MySQL server has gone away erreur, vous pouvez faire quelque chose comme ça.

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

il n'attrapera que l'erreur "disparu" et laissera les exceptions OperationalError déclenchées pour d'autres raisons.

MISE À JOUR

Comme je l'ai dit dans le commentaire, ma fonction d'interrogation ressemblerait à ceci :

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)

Ce n'est qu'un exemple et peut ne pas convenir à votre cas. Le point que j'essaie de faire valoir est qu'il est préférable d'avoir différentes fonctions pour différentes choses afin que vous puissiez gérer ces situations facilement.