Jeg løste dette problem ved at oprette en funktion, der omslutter cursor.execute()
metode, da det var det, der udløste MySQLdb.OperationalError
undtagelse. Det andet eksempel ovenfor antyder, at det er conn.cursor()
metode, der kaster denne undtagelse.
import MySQLdb
class DB:
conn = None
def connect(self):
self.conn = MySQLdb.connect()
def query(self, sql):
try:
cursor = self.conn.cursor()
cursor.execute(sql)
except (AttributeError, MySQLdb.OperationalError):
self.connect()
cursor = self.conn.cursor()
cursor.execute(sql)
return cursor
db = DB()
sql = "SELECT * FROM foo"
cur = db.query(sql)
# wait a long time for the Mysql connection to timeout
cur = db.query(sql)
# still works