这个问题是个很神奇的东西,简单来说就是用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 ()
if self.rownumber:
result = self._rows[self.rownumber:]
else:

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

被折叠的 条评论
为什么被折叠?



