【问题标题】:IndexError: tuple index out of range (PostgresSQL)IndexError:元组索引超出范围(PostgresQL)
【发布时间】:2021-03-28 15:52:46
【问题描述】:

我正在学习 PostgresSQL 作为一个新手,我遇到了这个名为“IndexError: tuple index out of range”的错误 我无法理解我在这方面做错了什么。这是完整的错误:

PS C:\Users\ketan\Documents\Python> & C:/Users/ketan/AppData/Local/Programs/Python/Python39/python.exe c:/Users/ketan/Documents/Python/error.py
Traceback (most recent call last):
  File "c:\Users\ketan\Documents\Python\error.py", line 10, in <module>
    update_table(20,16,'Apple')
  File "c:\Users\ketan\Documents\Python\error.py", line 6, in update_table
    cur.execute("UPDATE store SET quantity=%s, price=%s, item=%s WHERE item=%s",(quantity,price,item))
IndexError: tuple index out of range

这是我执行的代码:

import psycopg2

    def update_table(quantity,price,item):
        conn=psycopg2.connect("dbname='database1' user='postgres' password='(Your-own-password-please)' host='localhost' port='5432'")
        cur=conn.cursor()
        cur.execute("UPDATE store SET quantity=%s, price=%s, item=%s WHERE item=%s",(quantity,price,item))
        conn.commit()
        conn.close()
    
    update_table(20,16,'Apple')

请给我一些解决方案!

【问题讨论】:

    标签: python python-3.x database postgresql tuples


    【解决方案1】:

    所指的索引是对python结构的索引,而不是数据库索引。您有 4 个 %s 占位符,但只提供了 3 个值。

    【讨论】:

      【解决方案2】:

      有几个问题:

      1. 您的查询需要 4 个参数,而您要传递 3 个(用于初始化“项目”的参数

      2. 你正在传递数字,所以你应该使用 %d

      3. 对于字符串参数,您应该用引号将它们括起来。

      cur.execute("UPDATE store SET quantity=%d, price=%d, item='%s' WHERE item='%s'",(quantity,price,item,item))
      

      再想一想,你甚至不需要在按 item 搜索时更新 item,这没有任何意义:

      cur.execute("UPDATE store SET quantity=%d, price=%d WHERE item='%s'",(quantity,price,item))
      

      【讨论】:

      • 不要更改函数定义,不要添加其他项作为输入参数,只需将其传递给查询两次即可。请注意,我刚刚更改了查询行
      • 感谢您的回答。对代码进行一些调整后,问题得到解决。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-28
      • 2018-11-16
      • 2017-07-12
      • 2013-12-16
      • 2021-12-21
      • 2014-08-01
      相关资源
      最近更新 更多