cursor游标讲解

1、什么是游标?

        游标,通俗的解释就是"游动的标志",这是数据库中一个很重要的概念。

        有时候,我们执行一条查询语句的时候,往往会得到N条返回结果,执行sql语句取出这些返回结果的接口(起始点),就是游标。沿着这个游标,我们可以一次取出一行记录。

        当不使用游标功能,我们去执行 select * from student where age > 20; 这条语句的时候,如果有1000条返回结果,系统会一次性将1000条记录返回到界面中,你没有选择,也不能做其他操作。

        当我们开启了游标功能,再去执行这条语句的时候,系统会先帮你找到这些行, 先给你存放起来,然后提供了一个游标接口。当你需要数据的时候,就借助这个游标去一行行的取出数据,你每取出一条记录,游标指针就朝前移动一次,一直到取完最后一行数据后。

        一张图讲述游标的功能:

在这里插入图片描述
图示说明:

        假设我们是在"游标功能开启"的状态下,执行这条SQL语句。此时蓝色方框中的结果集并不会马上打印到屏幕上,而是将这些结果存储起来,提供一个游标接口,图中的红色箭头。当我们每获取其中一行数据的时候,这个红色游标就会沿着这个黑色箭头方向朝下,走一行;当再次获取第二行数据的时候,这个红色游标又会移动到第三行,一直到获取完结果集中的所有数据为止。

2、使用游标的好处?

        如果不使用游标功能,直接使用select查询,会一次性将结果集打印到屏幕上,你无法针对结果集做第二次编程。

        使用游标功能后,我们可以将得到的结果先保存起来,然后可以随意进行自己的编程,得到我们最终想要的结果集。

3、利用python连接数据库

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

        使用python连接数据库的时候,会经常使用游标这个功能。我们以python连接mysql数据库来说明使用游标的好处。

        当我们使用python连接mysql的时候,那么python就相当于是mysql服务器的一个客户端,我们利用python这个client去操纵mysql的server。

        在pymysql中操作数据库,就是使用游标这种方式来获取表中的数据。

2)使用游标的操作步骤

        首先,使用pymysql连接上mysql数据库,得到一个数据库对象。

        然后,我们必须要开启数据库中的游标功能,得到一个游标对象。

        接着,使用游标对象中的execute()方法,去执行某个SQL语句,系统会根据你的SQL语句,找到这些匹配行,给你存储起来,而不是一次性的打印到屏幕上。什么时候需要这个结果中的数据的时候,你就去获取它。

        最后,就是获取结果集中的数据了,这里有两种方法获取结果集中的数据。一个是fetchone(),该方法一次获取一条记录,每一条记录是一个元组形式的数据,每获取一条记录游标会往前移动一格,等待获取下一条记录;一个是fetchall()方法,能够一次性的获取所有的数据,该方法返回的是一个元组列表。

        当完成所有操作后,记得断开数据库的连接,释放资源。

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

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

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

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

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

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

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

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

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

# 一次性获取一条数据
a = cursor.fetchone()
# 一次性获取所有数据
a = cursor.fetchall()

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

⑤ 断开数据库,释放资源

db.close()

4、常用方法

方法
描述
execute()执行语句的方法。当我们定义了一个sql语句的时候可以用这个方法来执行这个语句
fetchall()取所有结果,就是获得执行sql语句后获得的结果。
cursor()创建游标对象
close()关闭此游标对象
fetchone()得到结果集的下一行
fetchmany([size = cursor.arraysize])得到结果集的下几行
executemany (sql, args)执行多个数据库查询或命令

尽量不使用executemany,通过程序循环不断调用excute函数

5、案例讲解

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

① student表
在这里插入图片描述
② 使用fetchone()方法,获取SQL查询结果集中的数据

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查询结果集中的数据

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语法,得到任何我们最终想要的结果集。

  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用Python中的pymysql库进行数据库操作时,创建cursor游标对象的步骤如下:首先,创建连接对象,使用pymysql库的connect()方法,并传入数据库的相关连接信息,如主机名、用户名、密码、数据库名、端口号等。然后,通过连接对象的cursor()方法创建游标对象,将游标对象赋值给一个变量。接下来,就可以使用游标对象进行数据库的增删改查操作了。在完成所有数据库操作后,需要关闭游标对象,使用游标对象的close()方法进行关闭。最后,还需要提交连接的事务,使用连接对象的commit()方法提交事务。最后,关闭连接对象,使用连接对象的close()方法进行关闭。 一个示例代码如下所示: ``` import pymysql # 创建连接对象 conn = pymysql.connect(host='localhost', user='root', password='123456', db='mydatabase', port=3306) # 创建游标对象 cur = conn.cursor() # 进行数据库操作 # ... # 关闭游标对象 cur.close() # 提交连接事务 conn.commit() # 关闭连接对象 conn.close() ``` 引用123 #### 引用[.reference_title] - *1* *3* [【数据库学习笔记】——cursor游标对象](https://blog.csdn.net/qq_45769063/article/details/121098611)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *2* [通过cursor游标讲解,带你初步搞懂python操作mysql数据库](https://blog.csdn.net/zhuxiao5/article/details/103900861)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值