首页 > 解决方案 > cursor.fetchall() 抛出索引或范围错误

问题描述

我有一个问题,我不确定根本原因在哪里:

我使用 python cx_Oracle 连接到 Oracle 数据库。

cursor.fetchall()以这种格式返回我的记录 [(4352,)]

我想检索“4352”,所以我继续这样做:pk = cursor.fetchall()[0][0]

但是我得到:IndexError: list index out of range

我不确定我做错了什么,因为当我在我的 python 控制台上手动创建这个返回对象时item = [(4352,)],我可以通过调用来检索 '4352'item[0][0]

谢谢

标签: python-3.6cx-oracleindex-error

解决方案


我弄清楚出了什么问题。

在我的代码中,我做了这样的事情:

print(cursor.fetchall()) # line 56
a = cursor.fetchall()[0][0] # line 57

在第 56 行,[(4352,)] 的输出是正确的。然而在第 57 行,cursor.fetchall()变成了 []。这是因为 cursor.fetchall() 是一个生成器。在第 56 行之后,它已被自动垃圾收集。

因此,如果我想从内部元组中提取 4352,我必须先调用第 57 行,然后再调用 print(a),如果我想从数据库中查看返回结果的值。


推荐阅读