Sie können die OperationalError-Ausnahme abfangen und die Verbindung wiederherstellen.
from MySQLdb import OperationalError
try:
my_sql_operation()
except OperationalError as e:
#do what you want to do on the error
reconnect()
print e
Wenn Sie ausdrücklich prüfen möchten, ob die Verbindung unterbrochen ist, bevor Sie Abfragen ausführen, können Sie eine Testabfrage ausführen, um zu überprüfen, ob die Ausnahme auftritt.
Ich bin mir nicht sicher, in welchen anderen Fällen OperationalError ausgelöst wird. Aber wenn Sie nur den MySQL server has gone away
Fehler, können Sie so etwas tun.
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()
Es fängt nur den 'Gone Away'-Fehler ab und lässt OperationalError-Ausnahmen aus, die aus anderen Gründen ausgelöst wurden.
AKTUALISIEREN
Wie ich im Kommentar sagte, würde meine Abfragefunktion so aussehen:
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)
Dies ist nur ein Beispiel und möglicherweise nicht für Ihren Fall geeignet. Der Punkt, den ich versuche zu machen, ist, dass es besser ist, verschiedene Funktionen für verschiedene Dinge zu haben, damit Sie diese Situationen einfach handhaben können.