Rozwiązałem ten problem, tworząc funkcję, która otacza cursor.execute()
metoda, ponieważ to właśnie rzuciło MySQLdb.OperationalError
wyjątek. Drugi przykład powyżej sugeruje, że jest to conn.cursor()
metoda, która zgłasza ten wyjątek.
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