SQL入门系列(十):cursor游标

在写SQL语句的时候通常是面向集合进行思考,我们更关注结果集,而不是具体的实现过程。但有时我们不需要对查询结果的所有数据行都采用相同的处理方式,而是每次处理一行或者部分行,此时就需要面向过程。游标就是这种编程方式的体现。

游标提供了一种灵活的操作方式,可以让我们从数据结果集中每次提取一条数据记录进行操作。游标让SQL这种面向集合的语言有了面向过程的能力。

游标是一种临时的数据库对象,可以指向存储在数据库表中的数据进行指针。此时游标充当了指针的作用,我们可以通过游标来对数据进行操作。

我们以王者荣耀英雄数据为例:

mysql> SELECT id, name, hp_max FROM heros WHERE hp_max > 8500;

+-------+--------+--------+
| id    | name   | hp_max |
+-------+--------+--------+
| 10007 | 程咬金 |   8611 |
| 10008 | 廉颇   |   9328 |
| 10012 | 白起   |   8638 |
| 10015 | 刘禅   |   8581 |
+-------+--------+--------+
4 rows in set (0.05 sec)

此时有4条返回结果,系统会一次性将4条记录返回到界面,无法进行其他操作。

当我们开启了游标功能,再去执行这条语句时,系统会先找到这些行,并将其存放起来,然后提供一个游标接口。需要时就可以通过这个游标一行行地取出数据,每取出一条记录,游标指针就朝前移动一次,一直到取完最后一行数据为止。

在使用Python连接数据库时,经常会用到游标功能。当我们使用Python连接MySQL时,Python相当于是MySQL服务器的一个客户端,我们是利用Python这个客户端去操作MySQL的服务器。即在Python中操作数据库,就是使用游标获取表中的数据。

具体的步骤是:
1.连接数据库,创建一个数据库对象

#安装pymysql
! pip install pymysql

#导入pymysql库
import pymysql

database_heros = pymysql.connect(host='localhost', user='root', db='heros',
                                password='ilikesql', port=3306, charset='utf8')

此时操作的是heros数据库中的表

  • host: 这个是ip地址,因为我这里是本地的,所以填127.0.0.1,也可以填localhost。
  • user:用户名,如果你也是本地的,就填root好了
  • passwd:填上设的密码就可以
  • db:这个是数据库名,这里选的是yibaidb数据库
  • port:这个是端口,本地的一般都是3306
  • charset:这个是编码方式,要和你数据库的编码方式一致,要不会连接失败

2.创建游标对象,开启游标功能

#创建游标对象
cursor = database_heros.cursor()

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

#使用execute()方法,执行SQL语句
cursor.execute('SELECT id, name, hp_max FROM heros WHERE hp_max > 8500')

此时系统会根据SQL语句找到匹配行,然后存储起来,而不是一次性打印到屏幕上。当需要的时候,再去获取即可。

4.获取结果集中的数据

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

(10007, '程咬金', 8611.0)

#一次性获取全部数据
b = cursor.fetchall()
print(b)

((10008, '廉颇', 9328.0), (10012, '白起', 8638.0), (10015, '刘禅', 8581.0))

5.断开数据库,释放资源

#断开数据库,释放资源
database_heros.close()

参考资料:
游标:当我们需要逐条处理数据时,该怎么做?
通过cursor游标讲解,带你彻底搞懂python操作mysql数据库

公众号.png

你可能感兴趣的:(SQL入门系列(十):cursor游标)