Jag löste det här problemet genom att skapa en funktion som omsluter cursor.execute()
metod eftersom det var det som skickade MySQLdb.OperationalError
undantag. Det andra exemplet ovan antyder att det är conn.cursor()
metod som kastar detta undantag.
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