2017-12-13 1 views
0

私はmysql dbと対話するためにmysql.connectorを使用しています。 myscriptの開始時にdb接続を作成し、select/insert/updateなどのすべてのデータベースアクティビティに対して同じ接続を再利用します。無作為に次の例外が発生します。python mysql.connector mysql接続が利用できないエラー

MySQL接続が利用できません。

Traceback (most recent call last): 
    File "database.py", line 46, in query 
    cursor = self.connection.cursor(buffered=True, dictionary=True) 
    File "lib/python3.4/site-packages/mysql/connector/connection.py", line 807, in cursor 
    raise errors.OperationalError("MySQL Connection not available.") 
mysql.connector.errors.OperationalError: MySQL Connection not available. 
2017-12-08 13:16:03,845 ERROR util.py 1247 MySQL Connection not available. 

上記のエラーの原因は何ですか?

import mysql.connector 


class Database: 
    """ 
     Simple Database class 
    """ 

    def __init__(self, db_conf, logger): 
     self.logger = logger 
     try: 
      self.connection = mysql.connector.connect(host=db_conf['host'], user=db_conf['user'], password=db_conf['password'], 
                 database=db_conf['db'], port=db_conf['port']) 
     except Exception as e: 
      self.logger.exception(e) 
      raise 

    def insert_or_update(self, query, type): 
     """ 
      Transactional query 
     """ 
     try: 
      cursor = self.connection.cursor(buffered=True) 
      cursor.execute(query) 
      self.connection.commit() 

      if type == 'insert': 
       last_row_id = cursor.lastrowid 
       cursor.close() 
       return last_row_id 
      elif type == 'update': 
       row_count = cursor.rowcount 
       cursor.close() 
       return row_count 
     except Exception as e: 
      self.connection.rollback() 
      self.logger.info(query) 
      self.logger.exception(e) 
      raise 

    def query(self, query): 
     """ 
      Non transactional query 
     """ 
     try: 
      cursor = self.connection.cursor(buffered=True, dictionary=True) 
      cursor.execute(query) 
      self.connection.commit() 
      result = cursor.fetchall() 
      cursor.close() 
      return result 
     except Exception as e: 
      self.logger.info(query) 
      self.logger.exception(e) 
      raise 
+0

あなたのコードを投稿に表示します。 –

+0

コードが更新されました – Jenish

答えて

0

いくつかのより多くの文脈では、このエラーの原因を決定する際に役に立つかもしれないが、通常、このエラーは次のいずれかになりますため、セッションタイムアウトに

  • により、ネットワークエラーまたは

ネットワークエラーの場合。次に、あなたのコードをexceptにラップし、もう一度やり直してください。これがセッションのタイムアウトに起因する場合は、セッションの管理を改善し、タスクのセッションを閉じて再オープンすることを検討する必要があります。

関連する問題