Resolví este problema creando una función que envuelve el cursor.execute()
ya que eso es lo que arrojaba el MySQLdb.OperationalError
excepción. El otro ejemplo anterior implica que es el conn.cursor()
método que arroja esta excepción.
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