Как получить последний sql errno для соединения pymysql? - PullRequest
0 голосов
/ 07 мая 2018

Я использую 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)

Но я бы больше хотел, чтобы клиентский код соответствовал другим пулам, более изящными способами?

1 Ответ

0 голосов
/ 08 мая 2018

Наконец, я реализую собственный класс подключения к базе данных и ввел член errno для записи последнего выполненного номера ошибки sql. Затем каждый раз, возвращая соединение с пулом, я сначала проверяю значение errno и, если оно равняется 2006 или 2013, я запускаю это разорванное соединение.

...