5

Python と mySQL を使用していますが、クエリ間に長い遅延があります。その結果、「MySQL 接続が切断されました」というエラーが表示されます。つまり、wait_timeout を超えています。

これについては、 「MySQL がなくなった」を適切に処理するなどで説明されています。

しかし、これは私の質問に明確に答えるものではありません。

したがって、これを処理するための私のアプローチ-すべてのSQL実行ステートメントをメソッドにラップしました-

  def __execute_sql(self,sql,cursor):
    try:
        cursor.execute(sql)

    except MySQLdb.OperationalError, e:            
        if e[0] == 2006:
            self.logger.do_logging('info','DB', "%s : Restarting db" %(e))
            self.start_database()

このクエリを呼び出すコードにはいくつかの場所があります。問題は、私もいくつかのカーソルを持っているので、メソッド呼び出しは次のようになります-

self.__execute_sql(sql,self.cursor_a)
self.__execute_sql(sql,self.cursor_b)

等々

データベースが開始された後、クエリを適切に再実行する方法が必要です。呼び出しを if ステートメントでラップし、再実行して、次のようにすることができます。

def __execute_sql(self,sql,cursor):
    try:
        cursor.execute(sql)
        return 1
except MySQLdb.OperationalError, e:            
    if e[0] == 2006:
        self.logger.do_logging('info','DB', "%s : Restarting db" %(e))
        self.start_database()
        return 0

その後

if (self.__execute_sql(sql,self.cursor_a) == 0):
   self.__execute_sql(sql,self.cursor_a)

しかし、これは不格好です。これを行うより良い方法はありますか?ありがとう!!!

4

3 に答える 3