1、什么是游标?
一张图讲述游标的功能:
图示说明:
2、使用游标的好处?
如果不使用游标功能,直接使用select查询,会一次性将结果集打印到屏幕上,你无法针对结果集做第二次编程。使用游标功能后,我们可以将得到的结果先保存起来,然后可以随意进行自己的编程,得到我们最终想要的结果集。
3、利用python连接数据库,经常会使用游标功能
1)以python连接mysql数据库为例
2)使用游标的操作步骤
① 连接数据库,创建一个数据库对象
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()
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语法,得到任何我们最终想要的结果集。