关于pymysql commit()方法卡主问题分析

在Python3环境下使用pytest测试框架,测试类的setup_class方法内执行数据库删除操作后,commit过程出现卡死现象,无错误日志。问题与debug模式下未正确关闭数据库cursor有关。解决方案包括添加超时处理和确保debug结束后完整执行关闭cursor的步骤。
摘要由CSDN通过智能技术生成

问题背景说明:

  1. python3环境

  1. pytest测试框架下

  1. pytest 测试用例 setup_class 方法中会执行数据库delete语句 ,顺利执行后commit()进程卡死

问题代码:

调用方法

class Test_CATS_friend:

    def setup_class(self):
        print('\n用例开始前执行数据清理操作')
        Mysql().delete_uid_all_data('xxxx')
def delete_uid_all_data(self, uid: str):
    self.cursor.execute("delete from table where uid=%s LIMIT 1" % uid)
    self.cursor.execute("delete from table where uid=%s" % uid)
    self.cursor.execute("delete from table where uid=%s" % uid)
    numbers_ = self.cursor.rowcount
    self.db.commit()
    self.log.info(f"{uid},数据删除成功,条数{numbers_}")

问题表现

在执行self.db.commit()代码时,进程卡主,也无报错日志,只能手动终止程序,再次执行结果一样

问题复现

尝试几次后发现,导致问题与调试debug模式有关,在debug打开数据库连接时,未关闭数据库cursor,停止debug,而未将程序执行完毕,正常执行关闭cursor语句

问题解决

  1. 代码块中添加超时容错,如果超时则执行cursor.close().然后重新执行程序即可恢复正常

  1. 在debug调试时,调试完毕时,让程序执行完整,正常关闭cursor

如有更好的方法或建议,欢迎留言指正~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值