您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:python操作数据库获取结果之fetchone和fetchall的区别说明

51自学网 2021-10-30 22:46:09
  python
这篇教程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_Oracleconn = 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)  # 1print(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)   # 1print(type(result_2))  # <class 'int'>

注意事项

对于使用fetchone和fetchall获取到的结果,最好使用之前先判断非空,否则在存在空值的情况下获取元组内的数据时,会报“超出索引”的异常。多次踩雷坑。

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

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

多个元素的列表:

单个元素的列表:

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


python基于tkinter点击按钮实现图片的切换
python之cur.fetchall与cur.fetchone提取数据并统计处理操作
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。