मैंने एक फ़ंक्शन बनाकर इस समस्या को हल किया जो cursor.execute()
. को लपेटता है विधि के बाद से वह क्या फेंक रहा था MySQLdb.OperationalError
अपवाद। ऊपर दिए गए दूसरे उदाहरण का अर्थ है कि यह conn.cursor()
है विधि जो इस अपवाद को फेंकती है।
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