解决pymysql cursor.fetchall() 获取不到数据的问题


Posted in Python onMay 15, 2020

1.之前的写法(不报错):

data = cursor.fetchall()
data_name = data[0]['task_type']

2.简洁的写法(报错):

data = cursor.fetchall()[0]['task_type']

用 2 的写法报错之后,一度怀疑是数据库出了问题。不服气用pycharm 的watch功能进行调试,更是错上加错。

解决pymysql cursor.fetchall() 获取不到数据的问题

错误原因:

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:]
  else:
   result = self._rows
  self.rownumber = len(self._rows)
  return result

代码简洁明了,如果_rows里面没值,确实是在数据库中没查到,那就返回空,如果有游标,那从游标位置开始取,否则,直接返回_rows整个结果集,然后将游标移到最后,问题将出在这,我可以确定每次执行完查询以后,我都关闭了游标,未关闭db连接,并且,不会针对同一次查询多次fetchall(),但是在执行的时候,有时候即使是第一次fetchall()方法,游标依然在最后,然后我给cursor中所有的rownumber的赋值语句全部加了断点,这些断点都没执行的情况下,rownumber的值依然变了,这足以确定不是pymysql的代码问题

解决方案:

这就更能确定是vscode的编译模块的问题了,新建一个py文件,将原代码原封不动的复制过去,再执行,竟然将这么好了?!就是这么神奇,什么代码没动,换个文件将好了,然后,这个bug是偶发性的,并不是每次fetchall()都会出现这种情况

以上这篇解决pymysql cursor.fetchall() 获取不到数据的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python常见文件操作的函数示例代码
Nov 15 Python
python实现DNS正向查询、反向查询的例子
Apr 25 Python
用Python中的__slots__缓存资源以节省内存开销的方法
Apr 02 Python
Python Requests模拟登录实现图书馆座位自动预约
Apr 27 Python
numpy中以文本的方式存储以及读取数据方法
Jun 04 Python
python+flask实现API的方法
Nov 21 Python
Python实现钉钉发送报警消息的方法
Feb 20 Python
python批量处理txt文件的实例代码
Jan 13 Python
python shapely.geometry.polygon任意两个四边形的IOU计算实例
Apr 12 Python
详解python的super()的作用和原理
Oct 29 Python
用python批量解压带密码的压缩包
May 31 Python
Python&Matlab实现灰狼优化算法的示例代码
Mar 21 Python
python如何解析复杂sql,实现数据库和表的提取的实例剖析
May 15 #Python
pymysql之cur.fetchall() 和cur.fetchone()用法详解
May 15 #Python
django 利用Q对象与F对象进行查询的实现
May 15 #Python
Python实现电视里的5毛特效实例代码详解
May 15 #Python
python中wx模块的具体使用方法
May 15 #Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
May 15 #Python
python随机模块random的22种函数(小结)
May 15 #Python
You might like
php的access操作类
2008/04/09 PHP
深入php socket的讲解与实例分析
2013/06/13 PHP
php像数组一样存取和修改字符串字符
2014/03/21 PHP
简单谈谈PHP中的trait
2017/02/25 PHP
php生成二维码不保存服务器还有下载功能的实现代码
2018/08/09 PHP
javascript attachEvent和addEventListener使用方法
2009/03/19 Javascript
JavaScript 精粹读书笔记(1,2)
2010/02/07 Javascript
解析dom中的children对象数组元素firstChild,lastChild的使用
2013/07/10 Javascript
jquery ajax jsonp跨域调用实例代码
2013/12/11 Javascript
jquery选择器原理介绍($()使用方法)
2014/03/25 Javascript
jQuery使用hide方法隐藏元素自身用法实例
2015/03/30 Javascript
初步了解javascript面向对象
2015/11/09 Javascript
微信小程序 倒计时组件实现代码
2016/10/24 Javascript
JS重载实现方法分析
2016/12/16 Javascript
js图片放大镜效果实现方法详解
2020/10/28 Javascript
ES6新数据结构Map功能与用法示例
2017/03/31 Javascript
JS常用正则表达式总结【经典】
2017/05/12 Javascript
基于Vue的延迟加载插件vue-view-lazy
2018/05/21 Javascript
Vue源码探究之状态初始化
2018/11/14 Javascript
JavaScript实现抖音罗盘时钟
2019/10/11 Javascript
Python下实现的RSA加密/解密及签名/验证功能示例
2017/07/17 Python
Python实现的递归神经网络简单示例
2017/08/11 Python
Python OpenCV处理图像之滤镜和图像运算
2018/07/10 Python
Python使用字典的嵌套功能详解
2019/02/27 Python
python3实现单目标粒子群算法
2019/11/14 Python
Python3和PyCharm安装与环境配置【图文教程】
2020/02/14 Python
基于CSS3 animation动画属性实现轮播图效果
2017/09/12 HTML / CSS
英国领先的家庭时尚品牌:Peacocks
2018/01/11 全球购物
师范应届生教师求职信
2013/11/05 职场文书
《找不到快乐的波斯猫》教学反思
2014/02/24 职场文书
陈安之励志演讲稿
2014/08/21 职场文书
2015年全国“爱牙日”宣传活动总结
2015/03/23 职场文书
酒店财务总监岗位职责
2015/04/03 职场文书
于丹论语心得观后感
2015/06/15 职场文书
java.util.NoSuchElementException原因及两种解决方法
2022/06/28 Java/Android
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技