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

Sådan tjekker du, om 'MySQL-serveren er gået væk'

Du kan fange OperationalError-undtagelsen og oprette forbindelse igen.

from MySQLdb import OperationalError

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

Hvis du udtrykkeligt vil kontrollere, om forbindelsen er væk, før du kører forespørgsler, kan du køre en testforespørgsel for at kontrollere, om undtagelsen forekommer.

Jeg er ikke sikker på, i hvilke andre tilfælde OperationalError er rejst. Men hvis du vil fange kun MySQL server has gone away fejl, kan du gøre sådan noget.

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

det vil kun fange fejlen 'gået væk' og lade OperationalError-undtagelser, der er rejst på grund af andre årsager, blive rejst.

OPDATERING

Som jeg sagde i kommentaren ville min forespørgselsfunktion være sådan her:

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)

Det er bare et eksempel og er måske ikke egnet til dit tilfælde. Pointen, jeg prøver at fremhæve, er, at det er bedre at have forskellige funktioner til forskellige ting, så du nemt kan håndtere disse situationer.



  1. 2 måder at erstatte en understreng i MariaDB

  2. Unicode (hexadecimale) bogstaver i MySQL

  3. Generer tabel DDL via forespørgsel på MySQL og SQL Server

  4. Fire almindelige myter om cloud-teknologi