什么是游标?(转)

文章转载地址

1、什么是游标?

一张图讲述游标的功能:

图示说明:

2、使用游标的好处?

如果不使用游标功能,直接使用select查询,会一次性将结果集打印到屏幕上,你无法针对结果集做第二次编程。使用游标功能后,我们可以将得到的结果先保存起来,然后可以随意进行自己的编程,得到我们最终想要的结果集。

3、利用python连接数据库,经常会使用游标功能

1)以python连接mysql数据库为例

2)使用游标的操作步骤

  • 首先,使用pymysql连接上mysql数据库,得到一个数据库对象。
  • 然后,我们必须要开启数据库中的游标功能,得到一个游标对象。
  • 接着,使用游标对象中的execute()方法,去执行某个SQL语句,系统会根据你的SQL语句,找到这些匹配行,给你存储起来,而不是一次性的打印到频幕上。当你什么时候需要这个结果中的数据的时候,你就去获取它。
  • 最后,就是获取结果集中的数据了,这里有两种方法获取结果集中的数据。一个是fetchone(),该方法一次获取一条记录,每一条记录是一个元组形式的数据,每获取一条记录游标会往前移动一格,等待获取下一条记录;一个是fetchall()方法,能够一次性的获取所有的数据,该方法返回的是一个元组列表。
  • 当完成所有操作后,记得断开数据库的连接,释放资源。

① 连接数据库,创建一个数据库对象

?
1
2
db = pymysql.connect(host = 'localhost' ,user = 'root' ,db = 'huangwei' ,
            password = '123456' ,port = 3306 ,charset = 'utf8' )

注意:我们要操作的是huangwei这个数据库中的表,因此在连接的时候使用db这个参数来指明要使用哪一个数据库;由于mysql数据库就装在本机上,因此可以写localhost,当然你也可以写成主机名,或者主机ip;

② 开启游标功能,创建游标对象

?
1
2
# 这里使用的是数据库对象db中的cursor()方法,
cursor = db.cursor()

③ 使用execute()方法,执行SQL语句

?
1
cursor.execute( 'select sname,ssex from student' )

注意:当开启游标功能执行这个SQL语句后,系统并不会将结果直接打印到频幕上,而是将上述得到的结果,找个地方存储起来,提供一个游标接口给我们,当你需要获取数据 的时候,就可以从中拿数据。

④ 使用fetchone()或fetchall()获取数据

?
1
2
3
4
5
# 一次性获取一条数据
a = cursor.fetchone()
 
# 一次性获取所有数据
a = cursor.fetchall()

注意:使用游标获取数据,需要用一个变量将结果存储起来,才能被我们拿来做二次使用,这里在下面的案例中会体现出来。

⑤ 断开数据库,释放资源

?
1
db.close()

3)案例讲解

需求:以操做huangwei数据库中的student表为例 。完成【筛选出女生,同时将sname以这种形式输出“我叫周梅,我是一个学生!”】这个需求。

① student表

 

② 使用fetchone()方法,获取SQL查询结果集中的数据

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
db = pymysql.connect(host = 'localhost' ,user = 'root' ,db = 'huangwei' ,
            password = '123456' ,port = 3306 ,charset = 'utf8' )
cursor = db.cursor()
cursor.execute( 'select count(*) from student' )
aa = cursor.fetchone()
print (aa)
 
# 注意这一句一定是在循环之外,不能放到循环里面。想想这是为什么?
cursor.execute( 'select sname,ssex from student'
for i in range (aa[ 0 ]):
   a,b = cursor.fetchone()
   if b = = "女" :
     a = "我叫{},我是一个学生!" . format (a)
     print (a)
db.close()

结果如下:

③ 使用fetchall()方法,获取SQL查询结果集中的数据

?
1
2
3
4
5
6
7
8
9
10
11
db = pymysql.connect(host = 'localhost' ,user = 'root' ,db = 'huangwei' ,
            password = '123456' ,port = 3306 ,charset = 'utf8' )
cursor = db.cursor()
cursor.execute( 'select sname,ssex from student' )
aa = cursor.fetchall()
# print(aa)
for a,b in aa:
   if b = = "女" :
     a = "我叫{},我是一个学生!" . format (a)
     print (a)
db.close()

 结果如下:

④ 结果分析

通过上述操作可以发现,这种游标功能可以帮助我们对SQL语句得到的结果集,进行二次开发,然后通过灵活的python语法,得到任何我们最终想要的结果集。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

                        <div class="art_xg">
                            <b>您可能感兴趣的文章:</b><ul><li><a href="/article/204537.htm" title="MySQL 游标的定义与使用方式" target="_blank">MySQL 游标的定义与使用方式</a></li><li><a href="/article/202061.htm" title="Mysql 存储过程中使用游标循环读取临时表" target="_blank">Mysql 存储过程中使用游标循环读取临时表</a></li><li><a href="/article/196314.htm" title="mysql声明游标的方法" target="_blank">mysql声明游标的方法</a></li><li><a href="/article/195096.htm" title="详解Mysql 游标的用法及其作用" target="_blank">详解Mysql 游标的用法及其作用</a></li><li><a href="/article/184451.htm" title="mysql游标的原理与用法实例分析" target="_blank">mysql游标的原理与用法实例分析</a></li><li><a href="/article/177266.htm" title="mysql存储过程之游标(DECLARE)原理与用法详解" target="_blank">mysql存储过程之游标(DECLARE)原理与用法详解</a></li><li><a href="/article/164679.htm" title="MySQL游标概念与用法详解" target="_blank">MySQL游标概念与用法详解</a></li><li><a href="/article/120171.htm" title="mysql的存储过程、游标 、事务实例详解" target="_blank">mysql的存储过程、游标 、事务实例详解</a></li><li><a href="/article/69107.htm" title="Mysql存储过程中游标的用法实例" target="_blank">Mysql存储过程中游标的用法实例</a></li><li><a href="/article/53106.htm" title="Mysql存储过程循环内嵌套使用游标示例代码" target="_blank">Mysql存储过程循环内嵌套使用游标示例代码</a></li><li><a href="/article/52131.htm" title="MySQL存储过程中游标循环的跳出和继续操作示例" target="_blank">MySQL存储过程中游标循环的跳出和继续操作示例</a></li><li><a href="/article/204604.htm" title="MySQL 游标的作用与使用相关" target="_blank">MySQL 游标的作用与使用相关</a></li></ul>
                        </div>

                    </div>
  • 9
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值