python中scroll的用法_Python_关于self.cur.scroll()的使用理解
python操作mysql,定义了一个查询多条数据的方法selectAll:
# 查询表中多条数据
def selectAll(self, condition):
try:
self.cur.execute(condition) # 在游标下执行语句
self.cur.scroll(0, mode='absolute') # 光标回到初始位置
results = self.cur.fetchall() # 返回游标中所有结果
except pymysql.Error as e:
results = "SQL10001" # 数据库执行错误
print("Mysql Error %d: %s" % (e.args[0], e.args[1]))
# print("error_info: %s" %e)
finally:
return results
【问题】关于self.cur.scroll()方法,为什么需要移动光标回到初始位置?把这条语句注释了输出结果也不变啊?
self.cur.scroll(0, mode='absolute') # 光标回到初始位置
【查询1】移动光标,scroll()方法概述
scroll(value, mode)
mode缺省值为'relative',代表相对移动。
当mode='relative'时,value就是移动的长度,value>0向后移动(从位置0移动到位置2),value<0向前移动(比如从位置2移动到位置0)
self.cur.scroll(-2, 'relative')
可以缩写为:
self.cur.scroll(-2)
当mode='absolute'时,代表绝对移动,value就代表移动的绝对位置,value=0就代表移动到位置0处,就是结果集开头,value=3就是移动到位置3处,也就是第4条记录处。
self.cur.scroll(0, 'absolute')
【查询2】scroll()方法使用实例
存在数据库表如下:
pdx
name
sex
dept
1
张三
1
市场部
2
李四
1
人事部
3
陈灵
0
技术部
4
王萌
0
财务部
实例1
self.cur.execute("select * from yui_user;") # 在游标下执行语句
results_crash = self.cur.fetchall() # 返回游标中所有结果
results = self.cur.fetchall() # 返回游标中所有结果
print(results_crash )
print(results)
由于第二行代码首先取出了所有结果,游标也相应的从结果集开始位置移动到结果集末尾,所以第二次使用fetchall()取出的就是空值。
>>> ((1, '张三', '1', '市场部'),
(2, '李四', '1', '人事部'),
(3, '陈灵', '0', '技术部'),
(4, '王萌', '0', '财务部'))
>>>()
实例2
self.cur.execute("select * from yui_user;") # 在游标下执行语句
results_crash = self.cur.fetchall() # 返回游标中所有结果
self.cur.scroll(-2, 'relative') # 光标向前移动2个位置
results = self.cur.fetchall() # 返回游标中所有结果
print(results_crash )
print(results)
与实例1不同的就是在第三行添加了scroll()方法移动光标,此时光标移动到pdx为3的位置,再次使用fetchall()取出的即为最后两条记录。
>>> ((1, '张三', '1', '市场部'),
(2, '李四', '1', '人事部'),
(3, '陈灵', '0', '技术部'),
(4, '王萌', '0', '财务部'))
>>>((3, '陈灵', '0', '技术部'),
(4, '王萌', '0', '财务部'))
【我对问题的解释】
单独把try执行部分拎出来:
try:
self.cur.execute(condition) # 在游标下执行语句
self.cur.scroll(0, mode='absolute') # 光标回到初始位置
results = self.cur.fetchall() # 返回游标中所有结果
由于第三句 results = self.cur.fetchall()之前没有执行其他从游标中获取结果的语句,即光标没有进行移动。因此无论有没有把光标移动到初始位置这一条语句,输出结果是不变的(目前结果也是正确的)。
但如果在results = self.cur.fetchall()之前再加入别的fetchall()或fetchone(),那就必须移动光标了,否则结果不正确。为了避免出现这种情况,每次在需要最后输出正确的fetchall()的结果前,加入移动光标的操作,确保获取的结果是正确的结果
以上是我对最初的问题的解释。如有错误或不足之处请一定指出来,虚心学习。
python中scroll的用法_Python_关于self.cur.scroll()的使用理解相关推荐
- python中的super用法详解_【Python】【类】super用法详解
一.问题的发现与提出 在Python类的方法(method)中,要调用父类的某个方法,在Python 2.2以前,通常的写法如代码段1: 代码段1: class A: def __init__(sel ...
- python中MySQLdb模块用法实例
篇文章主要介绍了python中MySQLdb模块用法,以实例形式详细讲述了MySQLdb模块针对MySQL数据库的各种常见操作方法,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了python中 ...
- 五分钟理解yield在python中的简单用法,让你不再迷惑
很多同学无论是在学习python还是使用python的过程中,都会遇到yield关键字,这个让人头大的问题,今天,就给大家分享一下我自学yield的心路历程 基本概念: (1)在 Python 中,使 ...
- format函数python的顺序_[转载] Python中format函数用法
Python中format函数用法 format优点 format是python2.6新增的格式化字符串的方法,相对于老版的%格式方法,它有很多优点. 1.不需要理会数据类型的问题,在%方法中%s只能 ...
- python代码大全表解释-python中的字典用法大全的代码
如下代码是关于python中的字典用法大全的代码. #!/usr/bin/env python # # [SNIPPET_NAME: Dictionaries 101] # [SNIPPET_CATE ...
- python教程实例-Python中函数的用法实例教程
本文以数值计算为例讲述了Python中函数的用法,分享给大家供大家参考借鉴之用.具体如下: 我们都知道圆的面积计算公式为: S = πr2 当我们知道半径r的值时,就可以根据公式计算出面积.假设我们需 ...
- 详解python中的用法_详解python中*号的用法
1.表示乘号 2.表示倍数,例如: def T(msg,time=1): print((msg+' ')*time) T('hi',3) 打印结果(打印3次): hi hi hi 3.单个 * (1) ...
- python中 str.strip()用法
python中 str.strip()用法 1.描述 str.strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列. (即可以去除特殊字符串) 注意:该方法只能删除开头或是 ...
- Python中的del用法
python中的del用法比较特殊,新手学习往往产生误解,弄清del的用法,可以帮助深入理解python的内存方面的问题. python的del不同于C的free和C++的delete. 由于pyth ...
最新文章
- Android 保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护
- 7.6 yum更换国内源 7.7 yum下载rpm包 7.8/7.9 源码包安装
- 决战双十一,促销海报设计模板,学习起来
- 用注解给映射视图的类创建联合主键
- 使用广泛的开源PCB文件查看器 Gerbv 含多个严重漏洞
- [Algorithm NLP] 文本深度表示模型——word2vecdoc2vec词向量模型
- 2009年程序员考试大纲
- excel熵值法计算权重_由搜索权重排序引入的思考
- 1x pcie 速度_usb 3.0 速度 pciex1 pci 速度 各总线的速度
- 命令行排序文件夹大小
- LTE学习笔记 ——SRB、DRB
- 直播 编解码、 协议、网络传输
- 谷仓创造区块链+电商消费新模式
- vue3 setup语法糖事件引用和写法
- QImage 32bit转8bit
- 在公路路肩施工阶段中机械设备与路平石模具配合显威力
- CAD画图 ——基础和直线
- qt widget 最大_Qt窗口操作函数(最大化,全屏,隐藏最大化,最小化)
- 读《Weighted Graph Based Description for Finger-Vein Recognition》
- 中职计算机优质课教学设计,中职教师优秀教学设计