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

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

多个元素的列表:

单个元素的列表:

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

(0)

相关推荐

  • python 操作mysql数据中fetchone()和fetchall()方式

    fetchone() 返回单个的元组,也就是一条记录(row),如果没有结果 则返回 None fetchall() 返回多个元组,即返回多个记录(rows),如果没有结果 则返回 () 需要注明:在MySQL中是NULL,而在Python中则是None 补充知识:python之cur.fetchall与cur.fetchone提取数据并统计处理 数据库中有一字段type_code,有中文类型和中文类型编码,现在对type_code字段的数据进行统计处理,编码对应的字典如下: {'ys4ng35

  • Python连接MySQL并使用fetchall()方法过滤特殊字符

    来一个简单的例子,看Python如何操作数据库,相比Java的JDBC来说,确实非常简单,省去了很多复杂的重复工作,只关心数据的获取与操作. 准备工作 需要有相应的环境和模块: Ubuntu 14.04 64bit Python 2.7.6 MySQLdb 注意:Ubuntu 自带安装了Python,但是要使用Python连接数据库,还需要安装MySQLdb模块,安装方法也很简单: sudo apt-get install MySQLdb 然后进入Python环境,import这个包,如果没有报

  • Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例

    本文实例讲述了Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法.分享给大家供大家参考,具体如下: demo.py(查询,取出一条数据,fetchone): from pymysql import * def main(): # 创建Connection连接 conn = connect(host='localhost',port=3306,user='root',password='mysql',database='jing_do

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

    每次使用python获取查询结果的时候,都会纠结一段时间到底用fetchone和fetchall,用不好容易报错,关键在于没有搞清楚它们之间的区别和使用场景. fetchone与fetchall区别 环境:python3中 fetchone 不管查询结果是多条数据还是单条数据,使用fetchone得到的始终是一个元组. 如果查询结果是单条数据:fetchone得到的单条数据的元组: 如果查询结果是多条数据:fetchone默认是结果中的第一条数据构成的元组: 这就决定了如果需要取元组中的数值,需

  • Python操作数据库之数据库编程接口

    目录 一.前言 二.连接对象 1.获取连接对象 2.连接对象的方法 三.游标对象 一.前言 在项目开发中,数据库应用必不可少.虽然数据库的种类有很多,如SQLite.MySQL.Oracle等,但是它们的功能基本是一样都是一样的,为对数据库统一的操作,大多数语言都提供了简单的.标准化的接口(API).在Python Database API 2.0规范中,定义了Python数据库API接口的各个部分,如模块接口.连接对象.游标对象.类型对象和构造器.DB API的可选扩展以及可选的错误处理机制等

  • python操作SqlServer获取特定表的所有列名(推荐)

    在网上搜过大多数资料,发现并不能按照自己的意愿实现最后的结果这里我使用两种方法,来实现结果,分别向大家展示下 不同方法所带来的结果.python连接sqlserver数据库代码 # 引入库 import pyodbc import pymssql from sqlalchemy import create_engine # 连接数据库 conn = pyodbc.connect(r'Driver={SQL Server};Server=服务器名;Database=数据库名;Trusted_Con

  • Python使用MySQLdb for Python操作数据库教程

    本文详细讲述了Python使用MySQLdb for Python操作数据库的方法,分享给大家供大家参考.具体如下: 一般来说网站就是要和数据库进行交互,否则什么都不用做了.今天我们就来分析一个叫MySQLdb的库,使用这个用来和MySQL数据库进行交互. 大家可以从这里获得这个库: http://sourceforge.net/projects/mysql-python 如果你不确定你的python环境里有没有这个库,那就打开python shell,输入 import MySQLdb,如果返

  • 详解在python操作数据库中游标的使用方法

    cursor就是一个Cursor对象,这个cursor是一个实现了迭代器(def__iter__())和生成器(yield)的MySQLdb对象,这个时候cursor中还没有数据,只有等到fetchone()或fetchall()的时候才返回一个元组tuple,才支持len()和index()操作,这也是它是迭代器的原因.但同时为什么说它是生成器呢?因为cursor只能用一次,即每用完一次之后记录其位置,等到下次再取的时候是从游标处再取而不是从头再来,而且fetch完所有的数据之后,这个curs

  • MongoDB安装使用并实现Python操作数据库

    一.MongoDB介绍 MongoDB 是一个是一个基于分布式文件存储的数据库,介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型.Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引. 二.安装MongoDB MongoDB安装很简单,无需下载源文件,可以直接用apt-ge

  • 跟老齐学Python之使用Python操作数据库(1)

    在上一讲中已经连接了数据库.就数据库而言,连接之后就要对其操作.但是,目前那个名字叫做qiwsirtest的数据仅仅是空架子,没有什么可操作的,要操作它,就必须在里面建立"表",什么是数据库的表呢?下面摘抄字维基百科对数据库表的简要解释,要想详细了解,需要看官在找一些有关数据库的教程和书籍来看看. 在关系数据库中,数据库表是一系列二维数组的集合,用来代表和储存数据对象之间的关系.它由纵向的列和横向的行组成,例如一个有关作者信息的名为 authors 的表中,每个列包含的是所有作者的某个

  • python操作数据库之sqlite3打开数据库、删除、修改示例

    复制代码 代码如下: #coding=utf-8__auther__ = 'xianbao'import sqlite3# 打开数据库def opendata():        conn = sqlite3.connect("mydb.db")        cur = conn.execute("""create table if not exists tianjia(id integer primary key autoincrement, user

  • Python操作MySQL MongoDB Oracle三大数据库深入对比

    目录 1. Python操作Oracle数据库 2. Python操作MySQL数据库 3. Python操作MongoDB数据库 作为数据分析师,掌握一门数据库语言,是很有必要的. 今天黄同学就带着大家学习两个关系型数据库MySQL.Oracle,了解一个非关系数据库MongoDB. 1. Python操作Oracle数据库 这一部分的难点在于:环境配置有点繁琐.不用担心,我为大家写了一篇关于Oracle环境配置的文章. Python操作Oracle使用的是cx_Oracle库.需要我们使用如

  • 使用Python操作MySql数据库和MsSql数据库

    目录 一.MySQL数据库模块的安装和连接 1. PyMySQL模块的安装 2 .python连接数据库 二.创建表操作 三.操作数据 1.插入操作 2. 查询操作 3. 更新操作 4. 删除操作 四.MS SQLSever数据库模块的安装和连接 1.正确安装方法: 2.Python操作sqlserver介绍 1.数据库连接类及参数介绍 2.数据库连接对象的方法 3.Cusor 对象方法 3.实例: 一.MySQL数据库模块的安装和连接 1. PyMySQL模块的安装 pip install p

随机推荐