Python从Oracle数据库中获取数据——fetchall(),fetchone(),fetchmany()函数功能分析

Python从Oracle数据库中获取数据——fetchall(),fetchone(),fetchmany()函数功能分析

一、fetchall(),fetchone(),fetchmany()简单介绍

1、fetchall()函数,它的返回值是多个元组,即返回多个行记录,如果没有结果,返回的是()
2、fetchone()函数,它的返回值是单个的元组,也就是一行记录,如果没有结果,那就会返回None,每次向后抓取一条记录
3、 fetchmany()函数,返回多个元组,返回多条记录(row),需要指定具体返回多少个记录。如fetchmany(2) 返回两条记录,默认则为1

二、fetchall(),fetchone(),fetchmany()详细介绍

下图是我这次学习使用的数据截图:
在这里插入图片描述然后我使用python连接到Oracle数据库,获取游标,编写sql语句。

import cx_Oracle
conn = cx_Oracle.connect('yoyo', '123456', '127.0.0.1:1521/yoyo')
# 使用cursor()方法获取操作游标
cursor = conn.cursor() 
# 通过游标cur操作execute()方法可以写入纯sql语句
s = cursor.execute("""select * from BRAND order by ID asc""")

下面进入正题,先使用fetchall()函数并查看执行结果。代码如下:

# fetchall()函数,它的返回值是多个元组,即返回多个行记录,如果没有结果,返回的是()
result1 = s.fetchall()
print(result1)

执行结果如下:
在这里插入图片描述
看到执行结果如我们预想的一样,按ID值升序排列获取全部5条记录,就像这个函数的名字一样,fetchall()就是抓取所有数据。

接着,我们再接着加入fetchone()函数,代码如图所示:

import cx_Oracle
# 执行以上代码,如果没有产生错误,表明安装成功
# 连接数据库,下面括号里内容根据自己实际情况填写
conn = cx_Oracle.connect('yoyo', '123456', '127.0.0.1:1521/yoyo')
# 使用cursor()方法获取操作游标
cursor = conn.cursor()
# 通过游标cur操作execute()方法可以写入纯sql语句
s = cursor.execute("""select * from BRAND order by ID asc""")
# fetchall()函数,它的返回值是多个元组,即返回多个行记录,如果没有结果,返回的是()
result1 = s.fetchall()
print(result1)
# fetchone()函数,它的返回值是单个的元组,也就是一行记录,如果没有结果,那就会返回None,每次向后抓取一条记录
result2 = s.fetchone()
result3 = s.fetchone()
print(result2)
print(result3)

执行结果如下所示:
在这里插入图片描述我们看到因为fetchall()已经把全部5条数据都抓取了,所以再使用fetchone()抓取数据,就会为空,和介绍中的功能完全符合,返回了None

这次我们注释掉fetchall()函数,再次执行如下代码:

import cx_Oracle
# 执行以上代码,如果没有产生错误,表明安装成功
# 连接数据库,下面括号里内容根据自己实际情况填写
conn = cx_Oracle.connect('yoyo', '123456', '127.0.0.1:1521/yoyo')
# 使用cursor()方法获取操作游标
cursor = conn.cursor()
# 通过游标cur操作execute()方法可以写入纯sql语句
s = cursor.execute("""select * from BRAND order by ID asc""")
# fetchall()函数,它的返回值是多个元组,即返回多个行记录,如果没有结果,返回的是()
# result1 = s.fetchall()
# print(result1)
# fetchone()函数,它的返回值是单个的元组,也就是一行记录,如果没有结果,那就会返回None,每次向后抓取一条记录
result2 = s.fetchone()
result3 = s.fetchone()
print(result2)
print(result3)

执行结果如下所示:
在这里插入图片描述
我们看到这次fetchone()函数抓取到了数据,根据fetchone()函数的功能所说,它是每次返回一个元组,执行一次就向后抓取一次数据,所以执行两次的结果result2和result3获取到的是不同的值。

接着,我们在后面再加入fetchmany()函数,代码如图所示:

import cx_Oracle
# 执行以上代码,如果没有产生错误,表明安装成功
# 连接数据库,下面括号里内容根据自己实际情况填写
conn = cx_Oracle.connect('yoyo', '123456', '127.0.0.1:1521/yoyo')
# 使用cursor()方法获取操作游标
cursor = conn.cursor()
# 通过游标cur操作execute()方法可以写入纯sql语句
s = cursor.execute("""select * from BRAND order by ID asc""")
# fetchall()函数,它的返回值是多个元组,即返回多个行记录,如果没有结果,返回的是()
# result1 = s.fetchall()
# print(result1)
# fetchone()函数,它的返回值是单个的元组,也就是一行记录,如果没有结果,那就会返回None,每次向后抓取一条记录
result2 = s.fetchone()
result3 = s.fetchone()
print(result2)
print(result3)
# fetchmany()函数,返回多个元组,返回多条记录(row),需要指定具体返回多少个记录。如fetchmany(2) 返回两条记录,默认则为1
result4 = s.fetchmany(3)
print(result4)

执行结果如下图所示:
在这里插入图片描述
在代码中,fetchmany()函数填写的获取数据的条数为3,所以运行结果的最后一行是最后三条记录,一起被显示出来。值得注意的是,fetchmany()函数是接着fetchone()函数抓取数据的,并不是又从回到头开始抓取数据,这在编程时应该被注意。

以上是我的学习分享,有不对的地方敬请读者指正。