Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak sprawdzić, czy „Serwer MySQL zniknął”

Możesz złapać wyjątek OperationalError i połączyć się ponownie.

from MySQLdb import OperationalError

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

Jeśli chcesz wyraźnie sprawdzić, czy połączenie zostało zerwane przed uruchomieniem zapytań, możesz uruchomić zapytanie testowe, aby sprawdzić, czy występuje wyjątek.

Nie jestem pewien, w jakich innych przypadkach zgłaszany jest błąd OperationalError. Ale jeśli chcesz przechwycić tylko MySQL server has gone away błąd, możesz zrobić coś takiego.

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

przechwyci tylko błąd „odeszło” i pozwoli na zgłoszenie wyjątków OperationalError zgłoszonych z innych powodów.

AKTUALIZUJ

Jak powiedziałem w komentarzu, moja funkcja zapytań wyglądałaby tak:

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)

To tylko przykład i może nie być odpowiedni w twoim przypadku. Chodzi mi o to, że lepiej mieć różne funkcje dla różnych rzeczy, aby łatwo poradzić sobie z takimi sytuacjami.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. podstawowe porównanie dat w celu sprawdzenia ważności

  2. MySQL:Sumuj wartości w podzapytaniach

  3. jak używać `charset` i `encoding` w `create_engine` SQLAlchemy (aby stworzyć pandas dataframe)?

  4. Wybierz różne rekordy w połączeniu

  5. MySQL Wiele zliczeń w jednym zapytaniu z wielkością liter