Я использую pymysql для взаимодействия с базой данных MySQL и внедрения пула соединений. Теперь проблема в том, как я могу вырезать сломанные соединения, когда они возвращаются в пул? Я не хочу выдавать команду ping или 'select 1', чтобы проверять проверку каждый раз, когда вы получаете соединение из пула, так как это приведет к снижению производительности.
Поэтому я задаюсь вопросом, есть ли способ или флаг, который я могу проверить, когда соединение возвращается в пул: выполняет ли последний выполненный sql исключение и что errno? Затем я могу проверить errno, чтобы узнать, не сломано ли соединение и повторно подключиться.
До сих пор одним из способов достижения этого является введение дополнительного аргумента методу close() для указания errno, если исключение произошло, когда клиент возвращает соединение.
errno = None
try:
conn = pool.get_connection()
conn.execute(sql)
exception pymysql.Error, e:
errno = e.args[0]
finally:
conn.close(errno)
Но я бы больше хотел, чтобы клиентский код поддерживал совместимость с другими пулами, более изящными способами?
Наконец, я реализую специальный класс подключения к базе данных и вводим член errno для записи последнего номера ошибки, выполненного sql. Затем каждый раз, когда вы возвращаете соединение с пулом, я сначала проверяю значение errno, и если он равен 2006 или 2013 году, я запускаю это сломанное соединение.