python - 如何获取 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)
但我更希望客户端代码与其他池保持一致,还有更优雅的方式吗?
解决方案
最后我实现了一个自定义的数据库连接类,并引入了一个 errno 成员来记录最后一个 sql 执行的错误号。然后每次返回池的连接时,我首先检查 errno 值,如果它等于 2006 或 2013,我会启动这个断开的连接。
推荐阅读
- django - 如何为表单创建自定义的“as_table()”方法?
- python - 如何创建用于在 python 中设置对象属性的模板函数?
- ruby-on-rails - Rails 使用多个数据库 - 没有将 nil 隐式转换为 String
- android - 多用户设备中的 Android ContentProvider 和服务
- java - Java - 实现快速排序
- javascript - 在反应导航中使用重置操作导航到不同的导航器
- ruby - 运行 Jekyll 命令时并发 ruby 冲突错误
- matlab - 多维外积(`kron`)的矢量化版本
- forms - 在 Google Apps Script 网络应用程序中获取任意表单元素的值
- inno-setup - 以编程方式固定到另一个(或所有)用户的快速访问