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