VScode pymysql模块fetchall方法取不到值bug

在使用VScode进行Python开发时遇到一个问题,使用pymysql模块的cursor对象的fetchall()方法无法获取到查询结果。尽管_rows中存在值,但返回结果为空。经过分析源码发现,游标(rownumber)的位置可能是导致问题的原因。关闭游标但保留db连接,并且不重复调用fetchall(),但在某些情况下,游标仍停留在最后。经过测试,将代码复制到新的py文件中运行,问题得到解决,表明这是VScode的编译模块导致的偶发性错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个问题是个很神奇的东西,简单来说就是用fetchall()取cusor中的_rows的值,明明_rows里面存在值,但依然取出来为空,看了一会pymysql里cursor里的源码,大概地了解到这个bug的表面原因:
原因:
cursor,在其内部有个rownumber的变量,作用大概就是“游标”的意思吧,如果你是用fetchone()方法,取出来的就是第一个数,然后将游标移到下一位,下次去取就是从游标的位置开始还不是从_rows里的起始位置开始,fetchmany()同理,另外,cursor中还提供了直接移动游标的方法,也就是scroll方法,接下来,我们具体分析下fetchall的代码:

     def fetchall(self):
        """Fetch all the rows"""
        self._check_executed()
        if self._rows is None:
            return</
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值