带你彻底搞懂python操作mysql数据库(cursor游标讲解)


Posted in Python onJanuary 06, 2020

1、什么是游标?

带你彻底搞懂python操作mysql数据库(cursor游标讲解)

一张图讲述游标的功能:

带你彻底搞懂python操作mysql数据库(cursor游标讲解)

图示说明:

带你彻底搞懂python操作mysql数据库(cursor游标讲解)

2、使用游标的好处?

如果不使用游标功能,直接使用select查询,会一次性将结果集打印到屏幕上,你无法针对结果集做第二次编程。使用游标功能后,我们可以将得到的结果先保存起来,然后可以随意进行自己的编程,得到我们最终想要的结果集。

3、利用python连接数据库,经常会使用游标功能

1)以python连接mysql数据库为例

带你彻底搞懂python操作mysql数据库(cursor游标讲解)

2)使用游标的操作步骤

  • 首先,使用pymysql连接上mysql数据库,得到一个数据库对象。
  • 然后,我们必须要开启数据库中的游标功能,得到一个游标对象。
  • 接着,使用游标对象中的execute()方法,去执行某个SQL语句,系统会根据你的SQL语句,找到这些匹配行,给你存储起来,而不是一次性的打印到频幕上。当你什么时候需要这个结果中的数据的时候,你就去获取它。
  • 最后,就是获取结果集中的数据了,这里有两种方法获取结果集中的数据。一个是fetchone(),该方法一次获取一条记录,每一条记录是一个元组形式的数据,每获取一条记录游标会往前移动一格,等待获取下一条记录;一个是fetchall()方法,能够一次性的获取所有的数据,该方法返回的是一个元组列表。
  • 当完成所有操作后,记得断开数据库的连接,释放资源。

① 连接数据库,创建一个数据库对象

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表

 带你彻底搞懂python操作mysql数据库(cursor游标讲解)

② 使用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()

结果如下:

带你彻底搞懂python操作mysql数据库(cursor游标讲解)

③ 使用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()

 结果如下:

带你彻底搞懂python操作mysql数据库(cursor游标讲解)

④ 结果分析

通过上述操作可以发现,这种游标功能可以帮助我们对SQL语句得到的结果集,进行二次开发,然后通过灵活的python语法,得到任何我们最终想要的结果集。

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

Python 相关文章推荐
深入理解Python 代码优化详解
Oct 27 Python
详解Python发送邮件实例
Jan 10 Python
python3.x上post发送json数据
Mar 04 Python
python使用xlsxwriter实现有向无环图到Excel的转换
Dec 12 Python
在Python 中实现图片加框和加字的方法
Jan 26 Python
详解重置Django migration的常见方式
Feb 15 Python
Python使用pyautocad+openpyxl处理cad文件示例
Jul 11 Python
Python基于pygame实现单机版五子棋对战
Dec 26 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
Feb 18 Python
PIL包中Image模块的convert()函数的具体使用
Feb 26 Python
Pandas加速代码之避免使用for循环
May 30 Python
Python实现byte转integer
Jun 03 Python
详解python tkinter模块安装过程
Jan 06 #Python
解决tensorflow由于未初始化变量而导致的错误问题
Jan 06 #Python
Python3 全自动更新已安装的模块实现
Jan 06 #Python
tensorflow 只恢复部分模型参数的实例
Jan 06 #Python
春节到了 教你使用python来抢票回家
Jan 06 #Python
Tensorflow 自定义loss的情况下初始化部分变量方式
Jan 06 #Python
在flask中使用python-dotenv+flask-cli自定义命令(推荐)
Jan 05 #Python
You might like
在PHP里得到前天和昨天的日期的代码
2007/08/16 PHP
php tp验证表单与自动填充函数代码
2012/02/22 PHP
php在数据库抽象层简单使用PDO的方法
2015/11/03 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
Laravel框架Blade模板简介及模板继承用法分析
2019/12/03 PHP
在网页中控制wmplayer播放器
2006/07/01 Javascript
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
2007/02/05 Javascript
js 判断 enter 事件
2009/02/12 Javascript
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
2012/01/15 Javascript
document.getElementById获取控件对象为空的解决方法
2013/11/20 Javascript
js从Cookies里面取值的简单实现
2014/06/30 Javascript
jQuery中even选择器的定义和用法
2014/12/23 Javascript
jQuery实现行文字链接提示效果的方法
2015/03/10 Javascript
使用Node.js处理前端代码文件的编码问题
2016/02/16 Javascript
老司机带你解读jQuery插件开发流程
2016/05/16 Javascript
jQuery EasyUI框架中的Datagrid数据表格组件结构详解
2016/06/09 Javascript
总结几道关于Node.js的面试问题
2017/01/11 Javascript
JavaScript观察者模式(publish/subscribe)原理与实现方法
2017/03/30 Javascript
javascript回调函数详解
2018/02/06 Javascript
Node.Js生成比特币地址代码解析
2018/04/21 Javascript
微信小程序使用canvas的画图操作示例
2019/01/18 Javascript
JavaScript面试技巧之数组的一些不low操作
2019/03/22 Javascript
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
2019/09/03 jQuery
JS立即执行的匿名函数用法分析
2019/11/04 Javascript
Python实现的堆排序算法原理与用法实例分析
2017/11/22 Python
python3实现公众号每日定时发送日报和图片
2018/02/24 Python
python3爬虫之设计签名小程序
2018/06/19 Python
python使用matplotlib画饼状图
2018/09/25 Python
python给list排序的简单方法
2020/12/10 Python
html5实现多文件的上传示例代码
2014/02/13 HTML / CSS
什么是ARP(Address Resolution Protocol)地址解析协议
2013/10/31 面试题
教师一岗双责责任书
2014/04/16 职场文书
留学推荐信中文范文
2015/03/26 职场文书
停电放假通知
2015/04/14 职场文书
2015年学校教研室主任工作总结
2015/07/20 职场文书
JS实现数组去重的11种方法总结
2022/04/04 Javascript