Python操作MySQL数据库:游标(Cursor)原理与实战详解
本文深入解析Python中MySQL数据库游标(Cursor)的核心概念与使用方法。通过对比直接查询与游标查询的区别,详细讲解如何利用pymysql库创建游标对象,执行SQL语句,并分别使用fetchone()和fetchall()方法获取数据。文章包含完整的代码示例,演示如何筛选特定数据并进行二次处理,帮助开发者高效管理数据库资源。
Python MySQL游标核心概念
1、什么是游标?

一张图讲述游标的功能:

图示说明:

使用游标的优势与操作步骤
2、使用游标的好处?
若不使用游标而直接执行select查询,数据库会将结果集一次性全部输出至屏幕,导致开发者无法对结果集进行后续的二次编程处理。启用游标功能后,查询结果会被先缓存保存,开发者可在此基础上自由编写逻辑,从而获取最终期望的数据集。
3、利用python连接数据库,经常会使用游标功能
1)以python连接mysql数据库为例

2)使用游标的操作步骤
- 首先,调用pymysql库连接MySQL数据库,获取数据库连接对象。
- 随后,必须通过该连接对象开启游标功能,从而获得一个游标对象。
- 接着,调用游标对象的execute()方法执行特定的SQL语句。系统会依据该语句检索匹配的行并存储起来,而非一次性打印至屏幕。当需要获取这些数据时,再通过游标接口进行提取。
- 最后一步是获取结果集中的具体数据,主要有两种方法:一是fetchone(),该方法每次仅获取一条记录,每条记录以元组形式返回,每获取一条后游标指针前移一位,等待下一次获取;二是fetchall(),该方法一次性获取所有剩余数据,返回一个包含所有元组的列表。
- 在所有操作完成后,务必断开数据库连接以释放相关资源。
数据库连接与游标创建实战
① 连接数据库,创建一个数据库对象
db = pymysql.connect(host='localhost',user='root',db='huangwei',
password='123456',port=3306,charset='utf8')
注意:本例操作的是huangwei数据库中的表,因此在连接时需通过db参数指定目标数据库;由于MySQL数据库部署在本机,host可写为localhost,也可替换为主机名或主机IP地址;
② 开启游标功能,创建游标对象
# 这里使用的是数据库对象db中的cursor()方法,
cursor = db.cursor()
SQL执行与数据获取方法
③ 使用execute()方法,执行SQL语句
cursor.execute('select sname,ssex from student')
注意:开启游标并执行SQL语句后,系统不会直接将结果打印至屏幕,而是将结果存储在内存中,并提供游标接口供后续数据提取。当需要获取数据时,即可通过该接口从中读取。
④ 使用fetchone()或fetchall()获取数据
# 一次性获取一条数据
a = cursor.fetchone()
# 一次性获取所有数据
a = cursor.fetchall()
注意:使用游标获取数据时,需将结果赋值给变量以便进行二次处理,具体体现见下方案例。
⑤ 断开数据库,释放资源
db.close()
综合案例:数据筛选与格式化输出
3)案例讲解
需求:以操作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语法,即可生成任何最终所需的结果集。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









