Python Postgres调用fetchone()报错:'int' object does not support indexing
问题解决:'int' object does not support indexing 错误
你的问题出在cur.execute()的参数传递上:在Python中,(0)只是一个整数,不是元组,而psycopg2要求execute的第二个参数必须是序列(元组、列表等)。当你传入单个整数时,psycopg2的执行逻辑会出现异常,导致fetchone()返回的不是预期的行元组,而是单个整数值,因此无法使用索引[0]。
修正步骤:
- 将execute的参数从
(0)改为(0,)(单个元素的元组必须加逗号),或者用列表[0]。
修正后的代码:
conn = psycopg2.connect( host=postgres_host, database=postgres_database, user=postgres_user, password=postgres_password) cur = conn.cursor() # 修正参数为单个元素的元组 cur.execute("SELECT * FROM videos WHERE status = %s", (0,)) result = cur.fetchone() # 先判断结果是否为空,避免空值报错 if result: print(result[0]) # 执行退出操作需加括号 exit()
额外提示:
- 如果仅需查询单个字段(比如仅获取ID),可以将SQL改为
SELECT id FROM videos WHERE status = %s,此时fetchone()返回(id值,)形式的元组,依然可用result[0]取值;也可以用cur.fetchval()直接获取单个字段值。 - 操作完成后建议关闭游标与连接,避免资源泄漏,可在末尾添加
cur.close()和conn.close()。
内容的提问来源于stack exchange,提问作者JJ The Second
相关产品推荐
相关产品推荐

