sql >> Databasteknik >  >> RDS >> Mysql

Hur man kontrollerar om "MySQL-servern har försvunnit"

Du kan fånga OperationalError-undantaget och återansluta.

from MySQLdb import OperationalError

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

Om du uttryckligen vill kontrollera om anslutningen är borta innan du kör frågor, kan du köra en testfråga för att kontrollera om undantaget inträffar.

Jag är inte säker på i vilka andra fall OperationalError uppstår. Men om du vill fånga bara MySQL server has gone away fel kan du göra något liknande.

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 kommer bara att fånga felet "borta bort" och låta OperationalError-undantag som uppstår på grund av andra skäl tas upp.

UPPDATERA

Som jag sa i kommentaren skulle min frågefunktion vara så här:

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 är bara ett exempel och kanske inte passar i ditt fall. Poängen jag försöker få fram är att det är bättre att ha olika funktioner för olika saker så att du enkelt kan hantera dessa situationer.



  1. varbinär till sträng på SQL Server

  2. MySQL anpassad primärnyckelgenerator

  3. Hur extraherar år, månader, dagar, timmar, minuter, sekunder från ett mysql-datum?

  4. Använda MySql med Entity Framework 4 och Code-First Development CTP