在写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数据库
网友评论