TypeError: 元组索引必须是整数,而不是字符串" - 使用带有整数索引的元组时

1 投票
1 回答
4852 浏览
提问于 2025-04-18 06:12

我遇到了一个奇怪的错误。我正在尝试使用 psycopg2 这个 Python 库,把一些值插入到数据库中。

我把一个包含两个值的元组(pages)传递给下面这个函数:

def insertPages(self,pages):
    cursor = self.connection.cursor()
    for page in pages:
        try:
            tupl = (page[0],page[1])
            print(str(tupl), str(tupl[0]),str(tupl[1]))
            cursor.execute("""INSERT INTO page(page_id,page_url) VALUES(%()s, %()s)""",tupl)
            self.connection.commit()
        except psycopg2.Error as error:
            safePrint("Database error when inserting page:" + str(error.pgcode) + str(error))

但是,不管我把 'pages' 这个元组传给 execute,还是把新的 'tupl' 元组传过去,我还是收到了同样的错误:

(0, 'page_1') 0 page_1
Traceback (most recent call last):
    File "/Users/netaro/EclipseWorkspace/PageRanker/src/main.py", line 184, in <module>
        main()
    File "/Users/netaro/EclipseWorkspace/PageRanker/src/main.py", line 179, in main
        postgresController.insertPages(pageController.getPageArray())
    File "/Users/netaro/EclipseWorkspace/PageRanker/src/main.py", line 102, in insertPages
        cursor.execute("""INSERT INTO page(page_id,page_url) VALUES(%()s, %()s)""",tupl)
TypeError: tuple indices must be integers, not str

这就很奇怪了,因为我用的只是简单的元组而已……

1 个回答

4

我对Psycopg2没有经验,不过从这个文档页面来看,你在%()s中使用括号,可能是表示你在用命名参数。如果是这样的话,你需要提供一个字典,而不是一个元组,作为第二个参数。

试着把这一行改成:

cursor.execute("INSERT INTO page(page_id,page_url) VALUES(%s, %s);", tupl)

撰写回答