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()--获取数据库所有记录列表
查询到的数据格式为列表:
多个元素的列表:
单个元素的列表:
以上为个人经验,希望能给大家一个参考,也希望大家多多支持好吧啦网。如有错误或未考虑完全的地方,望不吝赐教。
相关文章:
1. 在 XSL/XSLT 中实现随机排序2. JavaScript避免嵌套代码浅析3. CSS3实例分享之多重背景的实现(Multiple backgrounds)4. 用css截取字符的几种方法详解(css排版隐藏溢出文本)5. Vue Element UI 表单自定义校验规则及使用6. chatGPT教我写compose函数的详细过程7. CSS Hack大全-教你如何区分出IE6-IE10、FireFox、Chrome、Opera8. XML在语音合成中的应用9. asp(vbs)Rs.Open和Conn.Execute的详解和区别及&H0001的说明10. 《CSS3实战》笔记--渐变设计(一)
