我使用pymysql与mysql数据库交互并实现了一个连接池。现在的问题是,当断开的连接返回到池中时,如何逐出它们?我不想每次从池中获取连接时都发出ping或select 1命令来检查验证,因为这样会带来性能损失。
所以我想知道,当连接返回到池时,是否有一种方法或标志可以检查:最后执行的sql是否引发异常,错误号是什么?然后我可以检查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)
但我更希望客户机代码与其他池保持一致,还有更优雅的方式吗?
1条答案
按热度按时间xytpbqjk1#
最后,我实现了一个自定义数据库连接类,并引入了一个errno成员来记录最后一个sql执行的错误号。然后每次返回到池的连接时,我首先检查errno值,如果它等于2006或2013,我就会启动这个断开的连接。