python mysql.connector Mysql Ошибка подключения недоступна

0

Я использую mysql.connector для взаимодействия с mysql db. Я создаю соединение db в начале myscript и повторно использую одно и то же соединение для всех операций с базой данных, таких как select/insert/update и т.д. Случайно я получаю следующее исключение,

Соединение 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
Теги:

1 ответ

0

Некоторый контекст может быть полезен при определении причины этой ошибки, но обычно эта ошибка:

  • Из-за сетевой ошибки или
  • Из-за таймаута сеанса

Если это сетевая ошибка. Затем заверните свой код в исключение и повторите попытку. Если это связано с таймаутом сеанса, вы должны подумать об управлении своими сеансами лучше, закрытии и повторном сеансе для задач.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню