1、pymysql--fetchone()和fetchall()函数结果集为空返回值

由于之前对于pymysql的源码未进行细致的分析,一直记得这两个函数当结果集为空的时候,返回值应当是有键值为None的字典型数据。

在一次对某个sql查询时,结果集出现了空元组"()"。查看pymysql源码,发现fetchone()和fetchall()函数结果集为空时,确实会返回
一个空元组"()"。

但是再另一个结果集为空的sql查询中,出现了以下结果:

两个sql分别如下:
(1)返回空元组[sql_1]:
select * from tbl_kline_day where Period='86400' and InstrumentID='111111' order by TradeDay desc
(2)返回有键值为None的字典型数据[sql_2]:
select max(High), min(low) from (select High,low from tbl_kline_day where Period='86400' and InstrumentID='111111' order by TradeDay desc limit 0,249 ) a

分析sql发现,sql_2查询字段的时候,进行了函数计算,从而导致返回结果与sql_1有差异,同时与pymysql源码的定义又出入,从而引发对mysql查询时,直接查询字段与

查询进行函数计算之后的结果集的一点思考。

2、mysql字段,函数(字段)查询结果的思考

结合对python变量存储的理解,类比上述情况,得出以下推测:
(1)mysql在查询字段时,在内存中不会直接开辟新的空间存储查询到的值,在原字段的存储空间中查询到sql的结果集。
【佐证】在Navicat Premiun中,sql查询字段结果集为空,查询到的值展示为N/A

(2)mysql在查询函数(字段)时,经过函数计算的值在内存中开辟新的存储空间,在新的存储空间中展示sql查到的结果集。
【佐证】在Navicat Premiun中,sql查询函数(字段)结果集为空,查询到的值展示为Null

3、总结
(1)在pymysql库中,fetchone()和fetchall()函数在sql查询的结果集为空的时候,返回值是一个空元组
(2)mysql对于函数计算之后的字段会开辟新的存储空间存放

4、心得
(1)对于python常用第三方库的源码要在遇到疑问时能及时查阅,从而遇到的疑问
(2)对于无法理解的现象,根据以往经验,做出合理的假设,再去想办法验证这个假设

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/xiao-yin-30/p/14550339.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!