sql >> Base de Datos >  >> RDS >> Mysql

Cómo verificar si 'el servidor MySQL se ha ido'

Puede detectar la excepción OperationalError y volver a conectarse.

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 desea verificar explícitamente si la conexión se ha ido antes de ejecutar las consultas, puede ejecutar una consulta de prueba para verificar si se produce la excepción.

No estoy seguro de en qué otros casos se genera OperationalError. Pero si desea capturar solo el MySQL server has gone away error, puede hacer algo como esto.

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

solo detectará el error 'desaparece' y permitirá que surjan las excepciones OperationalError generadas debido a otras razones.

ACTUALIZAR

Como dije en el comentario, mi función de consulta sería así:

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)

Eso es solo un ejemplo y puede no ser adecuado para su caso. El punto que estoy tratando de hacer es que es mejor tener diferentes funciones para diferentes cosas para que puedas manejar estas situaciones fácilmente.