Я использую 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
Некоторый контекст может быть полезен при определении причины этой ошибки, но обычно эта ошибка:
Если это сетевая ошибка. Затем заверните свой код в исключение и повторите попытку. Если это связано с таймаутом сеанса, вы должны подумать об управлении своими сеансами лучше, закрытии и повторном сеансе для задач.