【问题标题】:cursor.fetchall() throws index out or range errorcursor.fetchall() 抛出索引超出范围错误
【发布时间】:2019-04-25 22:58:02
【问题描述】:

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

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

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

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

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

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

谢谢

【问题讨论】:

    标签: python-3.6 cx-oracle index-error


    【解决方案1】:

    我知道出了什么问题。

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

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

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

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

    【讨论】:

      【解决方案2】:

      您确定 fetchall() 语句返回的列表吗?

      结果列表看起来是空的。

      【讨论】:

      • 是的,我确定。我打印出结果并得到 [(4532,)]
      • 你的意思是你做了 print(cursor.fetchall())
      • 是的,我打印出了 cursor.fetchall()
      猜你喜欢
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 2012-05-04
      • 1970-01-01
      • 2016-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多