【我理解的Python】self.cur.scroll源码理解

总结我所理解的,整理过程的点点滴滴,只为回首往事时不因虚度年华而悔恨,不因碌碌无为而羞耻。

欢迎你来我的千聊平台,我们一起颠覆你的Python接口自动化测试

【目录】我所理解的Python

【问题】:为什么第二步要使用mode='absolute'使索引回到最初的位置呢?

self.cur.execute(condition)
self.cur.scroll(0,mode='absolute')# 游标索引回到初始位置
results =self.cur.fetchall()#返回游标中所有结果

【我的理解】:第二步是将游标回到原点,继而获取所有数据

1、我的数据库表数据是3条:


2、第一步是在游标下执行sql,那么执行的结果是先放在游标中的,这个没有异议;
3、第二步是在游标下执行.scroll方法,那么不清楚这一步具体是做啥的,我们看下Python源码是怎么解释的:


4、第三步在游标下执行fetchall()方法,同样我们看下Python源码是怎么解释的:


【更进一步】:设置游标位置

可以通过cursor.scroll(position, mode="relative | absolute")方法,来设置相对位置游标和绝对位置游标。
方法参数描述:
position : 游标位置(游标位置从0开始)
mode : 游标位置的模式(relative:默认模式,相对当前位置(即执行scroll方法时游标的位置);absolute:绝对位置)
例如:
mode=relative, position=1;表示的是设置游标为当前位置+1的位置,即向下移动一个位置
mode=absolute, position=2;将游标移动到索引为2的位置,无论当前位置在哪里

【样例解释】

#hrwang
#coding:utf-8
import MySQLdb
connection = MySQLdb.connect(host="127.0.0.1", port=3306, user="root", passwd="root", db='test_interface', charset='utf8')
cursor = connection.cursor()
# 返回执行结果数
nums = cursor.execute("select * from test_xml")#self._rows=<type 'tuple'>: ((1L, u'test1'), (2L, u'weqwe'), (3L, u'weqw'))
print(nums)#执行结果影响的数据条数
'''
    fetchone()源码
    def fetchone(self):
        """Fetches a single row from the cursor. None indicates that
        no more rows are available."""
        self._check_executed()
        if self.rownumber >= len(self._rows): return None
        result = self._rows[self.rownumber]
        self.rownumber = self.rownumber+1
        return result
'''
print(cursor.fetchone())  # 执行后,游标移动到索引位置为1,即self.rownumber=1
cursor.scroll(1,mode='relative')  # 相对游标移动模式,当前索引+1,即游标位置为2
'''
    fetchall()源码
    def fetchall(self):
        """Fetchs all available rows from the cursor."""
        self._check_executed()
        if self.rownumber:
            result = self._rows[self.rownumber:]
        else:
            result = self._rows
        self.rownumber = len(self._rows)
        return result
'''
print(cursor.fetchall())  # 因此获取所有数据即result=self._rows[2:],即result等于数据库第三个数
'''
    fetchmany()源码
    def fetchmany(self, size=None):
        """Fetch up to size rows from the cursor. Result set may be smaller
        than size. If size is not defined, cursor.arraysize is used."""
        self._check_executed()
        end = self.rownumber + (size or self.arraysize)
        result = self._rows[self.rownumber:end]
        self.rownumber = min(end, len(self._rows))
        return result
'''
print(cursor.fetchmany(size=1))  # 执行该语句前,self.rownumber=3,故result=()
cursor.scroll(0, mode="absolute")  # 绝对索引模式,将游标重置为0
print(cursor.fetchall())  # 因此获取所有数据,执行开始的时候self.rownumber=0,故result=self._rows
#执行结果是:
3
(1L, u'test1')
((3L, u'weqw'),)
()
((1L, u'test1'), (2L, u'weqwe'), (3L, u'weqw'))

################################################
先说下更新的原因:
今天在查询数据库数据时(表中无数据),使用self.cur.scroll(0,mode='absolute')会提示“out of range”,细心的朋友看源码也知道原因了,但是我不能理解源码为什么要这么写,难道没有数据就不能使用这个方法了吗?最后我没有找到原因也没去修改源码,默默的加了条数据。


image.png

作者简介:
1、6年软件测试经验;2、擅长接口手工测试及自动化测试,UI自动化,Django 框架;3、自编自导自演了一套基于 Python + Django + MySQL 的自动化测试平台;

想更深入的了解,欢迎来我的千聊平台,我们一起颠覆你的Python接口自动化测试

【目录】我所理解的Python

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,727评论 1 92
  • python操作mysql,定义了一个查询多条数据的方法selectAll: 【问题】关于self.cur.scr...
    蒹葭苍苍蛋阅读 1,561评论 0 51
  • 第八章 数据查询和选择 ||| 第十章 获取GIS数据列表和描述信息 我们将在本章中介绍以下几个案例: 游标对象(...
    muyan阅读 21,017评论 5 21
  • 1. tab列表折叠效果 html: 能源系统事业部 岗位名称: 工作地点 岗位名...
    lilyping阅读 1,830评论 0 1
  • 本书介绍 你是不是对Django的学习感到迷茫?是不是对网上零星的教程感到绝望?是不是苦于没有可以迅速上手的实例而...
    阡陌3536阅读 1,308评论 0 0