“TypeError:元组索引必须是整数,而不是str” - 使用带整数索引的元组时

时间:2014-05-11 15:27:50

标签: python python-3.x tuples typeerror psycopg2

所以我有一个奇怪的错误。我试图使用psycopg2 python库在数据库中插入一些值。

我将包含两个值的元组(页面)传递给以下函数:

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))

然而,无论我是否通过了这些页面'元组执行,或者我是否通过新的' 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 个答案:

答案 0 :(得分:4)

我没有Psycopg2的经验,但是查看doc page,似乎您在%()s中使用括号可能表示您正在使用命名参数,在哪种情况下你需要提供一个dict而不是一个元组作为第二个参数。

尝试将行更改为:

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