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

 更新时间:2021年04月09日 08:36:48   作者:蒲公英上的尘埃  
这篇文章主要介绍了python操作数据库获取结果之fetchone和fetchall的区别说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

每次使用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操作MySQL数据库9个实用实例

    Python操作MySQL数据库9个实用实例

    这篇文章主要介绍了Python操作MySQL数据库9个实用实例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • 用Python生成N层的杨辉三角的实现方法

    用Python生成N层的杨辉三角的实现方法

    这篇文章主要介绍了用Python生成N层的杨辉三角的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • python练习之循环控制语句 break 与 continue

    python练习之循环控制语句 break 与 continue

    这篇文章主要介绍了python循环控制语句 break 与 continue,break就像是终止按键,不管执行到哪一步,只要遇到break,不管什么后续步骤,直接跳出当前循环
    2022-06-06
  • 手把手教你使用Python绘制时间序列图

    手把手教你使用Python绘制时间序列图

    这篇文章主要介绍了手把手教你使用Python绘制时间序列图,本文将以股价数据集为例,指导你从Quandl下载股价数据集,并将这些数据绘制在价格和成交量图表上,需要的朋友可以参考下
    2022-01-01
  • python中readline判断文件读取结束的方法

    python中readline判断文件读取结束的方法

    这篇文章主要介绍了python中readline判断文件读取结束的方法,实例形式详细分析了Python中readline的用法,需要的朋友可以参考下
    2014-11-11
  • python项目对接钉钉SDK的实现

    python项目对接钉钉SDK的实现

    这篇文章主要介绍了python项目对接钉钉SDK的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Win10环境中如何实现python2和python3并存

    Win10环境中如何实现python2和python3并存

    这篇文章主要介绍了Win10环境中如何实现python2和python3并存,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • pandas 按照特定顺序输出的实现代码

    pandas 按照特定顺序输出的实现代码

    这篇文章主要介绍了pandas 按照特定顺序输出的实现代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-07-07
  • Python读写txt文本文件的操作方法全解析

    Python读写txt文本文件的操作方法全解析

    这篇文章主要介绍了Python读写txt文本文件的操作方法全解析,包括对文本的查找和替换等技巧的讲解,需要的朋友可以参考下
    2016-06-06
  • python如何使用正则表达式的前向、后向搜索及前向搜索否定模式详解

    python如何使用正则表达式的前向、后向搜索及前向搜索否定模式详解

    这篇文章主要给大家介绍了关于python如何使用正则表达式的前向、后向搜索及前向搜索否定模式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-11-11

最新评论