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()--获取数据库所有记录列表

查询到的数据格式为列表:

多个元素的列表:

python操作数据库获取结果之fetchone和fetchall的区别说明

单个元素的列表:

python操作数据库获取结果之fetchone和fetchall的区别说明

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

来源:https://blog.csdn.net/loner_fang/article/details/96477329

标签:python,fetchone,fetchall
0
投稿

猜你喜欢

  • Python深度学习神经网络残差块

    2021-05-27 03:41:24
  • 简单了解Python读取大文件代码实例

    2022-10-23 11:46:19
  • Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解

    2022-03-02 10:43:08
  • php基于curl实现随机ip地址抓取内容的方法

    2023-11-14 22:29:45
  • php编程每天必学之表单验证

    2023-07-19 05:50:59
  • 使用python获取电脑的磁盘信息方法

    2021-05-09 18:14:42
  • 在python中利用最小二乘拟合二次抛物线函数的方法

    2021-05-03 01:18:20
  • idea+git合并分支解决冲突及详解步骤

    2022-10-07 00:18:27
  • 常见数据库系统比较 Oracle数据库

    2010-07-28 12:44:00
  • Python内建类型int源码学习

    2023-07-02 19:22:15
  • mysql查询时offset过大影响性能的原因和优化详解

    2024-01-13 14:17:36
  • jQuery实现的简单分页示例

    2024-04-09 19:45:29
  • matplotlib调整子图间距,调整整体空白的方法

    2021-12-17 15:06:58
  • MybatisPlus BaseMapper 实现对数据库增删改查源码

    2024-01-26 10:03:57
  • 利用PyQt5制作一个豆瓣电影信息查看器

    2021-03-05 05:57:28
  • Python学习之元组的使用详解

    2021-05-13 10:49:23
  • SQL Server中identity(自增)的用法详解

    2024-01-24 22:33:50
  • Golang中的参数传递示例详解

    2024-05-08 10:51:33
  • 14条最佳JS代码编写技巧[译]

    2009-11-09 19:37:00
  • SQL Server数据库占用过多内存的解决方法

    2009-10-23 14:02:00
  • asp之家 网络编程 m.aspxhome.com