Python操作MySQL数据库:游标(Cursor)原理与实战详解

月亮慢半拍
月亮慢半拍
发布时间:2026-10-13 | 6人浏览过
原创

本文深入解析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语法,即可生成任何最终所需的结果集。

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

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表