首页 > 解决方案 > 如何获取 pymysql 连接的最后一个 sql errno?

问题描述

我使用 pymysql 与 MySQL 数据库交互并实现连接池。现在的问题是当它们返回到池中时,我怎样才能驱逐断开的连接?每次从池中获取连接时,我不想发出 ping 或“选择 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)

但我更希望客户端代码与其他池保持一致,还有更优雅的方式吗?

标签: pythonmysqlconnection-poolingpymysql

解决方案


最后我实现了一个自定义的数据库连接类,并引入了一个 errno 成员来记录最后一个 sql 执行的错误号。然后每次返回池的连接时,我首先检查 errno 值,如果它等于 2006 或 2013,我会启动这个断开的连接。


推荐阅读