带你彻底搞懂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实现基于多线程、多用户的FTP服务器与客户端功能完整实例
Aug 18 Python
python中的迭代和可迭代对象代码示例
Dec 27 Python
Pyinstaller将py打包成exe的实例
Mar 31 Python
python发送邮件脚本
May 22 Python
对python 操作solr索引数据的实例详解
Dec 07 Python
Python字符串处理的8招秘籍(小结)
Aug 13 Python
python multiprocessing多进程变量共享与加锁的实现
Oct 02 Python
python tkinter控件布局项目实例
Nov 04 Python
Python 元组拆包示例(Tuple Unpacking)
Dec 24 Python
Python爬虫与反爬虫大战
Jul 30 Python
Python字符串及文本模式方法详解
Sep 10 Python
Python列表的深复制和浅复制示例详解
Feb 12 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 程序员也要学会使用“异常”
2009/06/16 PHP
PHPWind 发帖回帖Api PHP版打包下载
2010/02/08 PHP
window+nginx+php环境配置 附配置搭配说明
2010/12/29 PHP
深入php 正则表达式的学习探讨
2013/06/06 PHP
探讨php define()函数及defined()函数使用详解
2013/06/09 PHP
php基于CodeIgniter实现图片上传、剪切功能
2016/05/14 PHP
使用Codeigniter重写insert的方法(推荐)
2017/03/23 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
Yii2语言国际化的配置教程
2018/08/19 PHP
PHP面向对象程序设计之构造方法和析构方法详解
2019/06/13 PHP
JavaScript 开发规范要求(图文并茂)
2010/06/11 Javascript
JS防止用户多次提交的简单代码
2013/08/01 Javascript
一个检测表单数据的JavaScript实例
2014/10/31 Javascript
Javascript基础教程之比较操作符
2015/01/18 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
JavaScript记录光标在编辑器中位置的实现方法
2016/04/22 Javascript
JS中对象与字符串的互相转换详解
2016/05/20 Javascript
Bootstrap源码解读表单(2)
2016/12/22 Javascript
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
2019/09/03 jQuery
小程序实现按下录音松开识别语音
2019/11/22 Javascript
vue中使用腾讯云Im的示例
2020/10/23 Javascript
Python 两个列表的差集、并集和交集实现代码
2016/09/21 Python
Pycharm 操作Django Model的简单运用方法
2018/05/23 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
2020/07/14 Python
IE滤镜与CSS3效果(详细整理分享)
2013/01/25 HTML / CSS
美国折扣宠物药房:Total Pet Supply
2018/05/27 全球购物
linux面试相关问题
2013/04/28 面试题
文员岗位职责
2013/11/09 职场文书
八年级音乐教学反思
2014/01/09 职场文书
和平主题的演讲稿
2014/01/12 职场文书
《童年的发现》教学反思
2014/02/14 职场文书
简洁的英文求职信范文
2014/05/03 职场文书
社区服务标语
2014/07/01 职场文书
关于运动会的广播稿(10篇)
2014/09/12 职场文书
nginx 反向代理之 proxy_pass的实现
2021/03/31 Servers
A22国内电台短波广播频率表
2022/05/10 无线电