You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在psycopg2中使用TRANSLATE()时遭遇KeyError问题求助

KeyError: 'snumber' When Accessing Column With DictCursor in psycopg2

这个问题我之前也碰到过,原因其实很简单——你用TRANSLATE处理后的列没有指定别名,导致DictCursor找不到对应的键名。

问题根源

当你执行SELECT TRANSLATE(snumber, ' ', ''), age FROM sprofile时,PostgreSQL返回的结果集中,第一列的名称并不是snumber,而是整个表达式TRANSLATE(snumber, ' ', '')。虽然psql命令行工具可能会简化显示这个列名,但DictCursor是严格按照结果集返回的列名作为字典键的,所以你用row['snumber']自然会触发KeyError。

而用row[0]能正常工作,是因为DictCursor同时支持按列的索引位置访问,不管列有没有别名,第一个列都可以通过索引0获取。

解决方案

给处理后的列添加一个别名(用AS关键字),让它的键名变回snumber即可:

cur_t = conn_t.cursor(cursor_factory=psycopg2.extras.DictCursor)
# 为TRANSLATE处理后的列指定别名AS snumber
cur_t.execute(""" SELECT TRANSLATE(snumber, ' ', '') AS snumber, age FROM sprofile """)
for row in cur_t:
    print(row['snumber'])  # 现在可以正常访问了

这样修改后,结果集里的第一列就会以snumber作为键名,DictCursor就能正确识别并返回对应的值了。

内容的提问来源于stack exchange,提问作者tango ward

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:01:24