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
猜你喜欢
- 本文实例为大家分享了python实现矩阵打印的具体代码,供大家参考,具体内容如下之前面试嵌入式软件的一道题,用c实现矩阵打印,考场上并没有写
- 构建运动模糊模型现假定相机不动,图像f(x,y)在图像面上移动并且图像f(x,y)除移动外不随时间变化。令x0(t)和y0(t)分别代表位移
- queue分类python3 queue分三类:先进先出队列后进先出的栈优先级队列他们的导入方式分别是:from queue import
- 文章开始先讲下交叉验证,这个概念同样适用于这个划分函数1.交叉验证(Cross-validation)交叉验证是指在给定的建模样本中,拿出其
- 引言通常,您可能希望在 Pandas DataFrame 中插入一个新列。幸运的是,使用 pandas insert()函数很容易做到这一点
- CREATE PROCEDURE page @tblName varchar(255), -- 表名 @strGetFields varch
- 话不多说,请看代码------------------------------------------作者:张欣宇-----时间:2013-
- 本文实例讲述了python装饰器常见使用方法。分享给大家供大家参考,具体如下:python 的装饰器,可以用来实现,类似spring AOP
- 摘要:随着应用领域的不断拓展和多媒体技术, 人们发现关系数据库的许多限制和不足,因而数据库技术进入了“后关系数据库时代”。文件数据库由此应运
- 图片修复程序-可用于水印去除在现实的生活中,我们可能会遇到一些美好的或是珍贵的图片被噪声干扰,比如旧照片的折痕,比如镜头上的灰尘或污渍,更或
- 一、软件准备:以下均为截止2005-4-20的最新正式版本PHP(5.1.2):http://www.php.netMySQL(5.0.19
- hello,我是小小炽,这是我写的第一篇博客,写博客一直都想在写,但是苦于能力尚浅,在各位大牛面前那既然是关公面前耍大刀了,但是其实想来每一
- 函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。注意其中:map和filter返回一个惰性序列,可
- 使用Python时,常遇到的一个问题就是Python和库的版本不同。Anaconda的env算是解决这个问题的一个好用的方法。但是,在使用J
- 自动等待及元素执行方法操作元素的一系列方法,只要调用了测试夹函数page,就能引出操作元素的方法:import pytestfrom pla
- 用Python求解微分线性方程因为之前用matlab也编写过,所以前不久试着用python写,感觉之间互通点也蛮多的,易理解。题目:稀疏线性
- 查询效率分析:子查询为确保消除重复值,必须为外部查询的每个结果都处理嵌套查询。在这种情况下可以考虑用联接查询来取代。如果要用子查询,那就用E
- 关于python的ssh库操作需要引入一个远程控制的模块——paramiko,可用于对远程服务器进行
- 今天刷二级题的时候,遇到一个问题>>> L2=[1,2,3,4]>>> L3=L2.reverse()&
- 遇到两次mysql密码忘记了?最开始干了最傻的事,卸载了重装。现在有一个不用卸载也能把密码设置回来的办法。知识来源于网络,我这里稍加整理,遇