解决解决pymysql cursor.fetchall() 获取不到数据的问题获取不到数据的问题
主要介绍了解决pymysql cursor.fetchall() 获取不到数据的问题,具有很好的参考价值,希望对大家有所帮助。
一起跟随小编过来看看吧
1.之前的写法(不报错):
data = cursor.fetchall()
data_name = data[0]['task_type']
2.简洁的写法(报错):
data = cursor.fetchall()[0]['task_type']
用 2 的写法报错之后,一度怀疑是数据库出了问题。不服气用pycharm 的watch功能进行调试,更是错上加错。
错误原因:错误原因:
cursor.fetchall() 相当于从数据库取数据,但是取完就没有了,再下一行继续 cursor.fetchall(),取到的就只是空列表。他和变
量不一样,不能重复查询,推荐第一种写法,将数据取出来之后,放到一个变量里,再进行处理。
用watch 功能更是添乱。
补充知识:补充知识:VScode pymysql模块模块fetchall方法取不到值方法取不到值bug
这个问题是个很神奇的东西,简单来说就是用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:]
评论0
最新资源