python操作数据库获取结果之fetchone和fetchall的区别说明
作者:蒲公英上的尘埃 发布时间:2024-01-26 22:59:47
每次使用python获取查询结果的时候,都会纠结一段时间到底用fetchone和fetchall,用不好容易报错,关键在于没有搞清楚它们之间的区别和使用场景。
fetchone与fetchall区别
环境:python3中
fetchone
不管查询结果是多条数据还是单条数据,使用fetchone得到的始终是一个元组。
如果查询结果是单条数据:fetchone得到的单条数据的元组;
如果查询结果是多条数据:fetchone默认是结果中的第一条数据构成的元组;
这就决定了如果需要取元组中的数值,需要使用cur.fetchone[0]
fetchall
不管查询结果是多条数据还是单条数据,使用fetchall得到的始终是一个由元组组成的列表。
如果查询结果是单条数据:fetchall得到的是由单个元组组成的列表,列表内是有单条数据组成的元组,即列表包含元组;
如果查询结果是多条数据:fetchall得到的是由多个元组组成的列表;
这就决定了如果需要取元组中的数值,需要使用cur.fetchone[0][0]
使用场景
一般来说,查询结果集是单条数据的,使用fetchone获取数据
一般来说,查询结果集是多条数据的,使用fetchall获取数据
简单实例
import cx_Oracle
conn = cx_Oracle.connect("用户名/密码@数据库地址")
cur = conn.cursor()
sql_3 = "select id from CZEPT_BSDT t WHERE name='{}'".format("基本支出调剂")
cur.execute(sql_3)
result_3 = cur.fetchone() # 单条数据结果集
print(result_3) # (1,)
print(type(result_3)) # <class 'tuple'>
result_3= result_3[0]
print(result_3) # 1
print(type(result_3)) # <class 'int'>
print("*" * 50)
sql_2 = "select * from CZEPT_BSDT "
cur.execute(sql_2)
result_2 = cur.fetchall() # 多条数据结果集
print(result_2) # [(1,'基本支出调剂'),(3,'银行账户审批'),(5,'项目支出调剂')]
print(type(result_2)) # <class 'list'>
result_2= result_2[0][0]
print(result_2) # 1
print(type(result_2)) # <class 'int'>
注意事项
对于使用fetchone和fetchall获取到的结果,最好使用之前先判断非空,否则在存在空值的情况下获取元组内的数据时,会报“超出索引”的异常。多次踩雷坑。
import cx_Oracle
connection = cx_Oracle.connect('用户名/密码@数据库地址')
cur = connection.cursor()
for j in data_list:
sql = "select guid from jczl.division where name='{}'".format(j['DIVISIONNAME'])
cur.execute(sql)
result = cur.fetchone()
# 因为存在归口处室为空,所以切片的时候总是报超出索引范围,搞了好久
if result is not None:
j['DIVISIONGUID'] = str(result[0])
补充:python DB.fetchall()--获取数据库所有记录列表
查询到的数据格式为列表:
多个元素的列表:
单个元素的列表:
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://blog.csdn.net/loner_fang/article/details/96477329


猜你喜欢
- 目录一、什么是 socket ?二、Socket 编程的重要概念① IP 地址② TCP/IP 端口③ 协议三、socket 编程的 API
- 平常需要怎么做来维护数据库吗?1. 允许收缩数据库中的每个文件以删除未使用的页。数据和事务日志文件都可以收缩。数据库文件可以作为组或单独地进
- 高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法
- 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用,每天百万级甚至上亿的PV无疑对数据库造成了
- 安装SQL Server 2005弄了好久,终于可以了。。。期间问题重重,想拿出来和大家一同分享的。第一种错误显示:无法在com+目录中安装
- 使用在Safari和WebKit中可用的CSS高级特性,你可以为你的网站和网络应用带来一个新的级别的令人兴奋的东西。WebKit是Safar
- 1.go项目在window下编译简易打包1).在windows下直接编译生成main.exe文件在项目main.go同级目录下执行以下命令g
- 1.创建一个项目django-admin.py startproject HelloWorld2.进入HelloWorld项目,在manag
- 1、什么是水仙花数?水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digit
- 1) 创建配置文件和帐户 (创建一个配置文件和配置数据库邮件向导,用以访问配置数据库邮件管理节点中的数据库邮件节点及其上下文菜单中使用的帐户
- 前言,在pytorch中,当服务器上的gpu被占用时,很多时候我们想先用cpu调试下代码,那么就需要进行gpu和cpu的切换。方法1:x.t
- 国旗是一个国家的象征,它可以反映一个国家的特色和传统,国旗起源于近代的欧洲,是一个国家主权意识不断增强后的必然产物,本文我们使用 Pytho
- 创建一个优秀的可视化图表的关键在于引导读者,让他们能理解图表所讲述的故事。在一些情况下,这个故事可以通过纯图像的方式表达,不需要额外添加文字
- cursor就是一个Cursor对象,这个cursor是一个实现了迭代器(def__iter__())和生成器(yield)的MySQLdb
- 功能需求1,利用随机数模拟产生每次考试成绩2,将每次考试成绩存入到数据库3,将每次考试成绩划分优、良、中、差、不及格五类,并作为查询条件,查
- help函数是python的一个内置函数(python的内置函数可以直接调用,无需import),它是python自带的函数,任何时候都可以
- 今天群友提出一个问题:给出Word示例如下:对于这种嵌入文件在Word中都属于ole文件。下面我们假设需要读取每个嵌入的Excel文件中的p
- 前言最近重新再看python的基础知识,感觉自己还是对于这些知识很陌生,需要用的时候还是需要翻书查阅,还是先注重基础吧——我要重新把pyth
- 如何用SQL 建表? 如下:CREATE TABLE statement
- 脚本调试第一步:设置中断(鼠标左键点击)第二步:输入中断条件(可选功能,鼠标右键点击红点)第三步:触发中断(当符合条件是,中断被触发)出现中