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

使用psycopg2查询PostgreSQL时出现UndefinedColumn错误求助

问题修复:psycopg2执行SELECT查询时的UndefinedColumn错误

错误原因

PostgreSQL中,双引号(") 用于引用标识符(比如表名、列名),你把字符串值123-45-6789用双引号包裹,导致数据库将其识别为列名,从而抛出UndefinedColumn错误。

修复方案

方案1:修正引号使用

将WHERE子句中的值改用单引号(')包裹,同时保留列名的双引号(适配大小写敏感的列名"SSN"):

import psycopg2

con = psycopg2.connect(database="dbname",user="postgres",password="pwd",host="localhost",port= '5432')
cursor_obj = con.cursor()

# 将查询值改为单引号包裹
x = 'select "*" FROM PUBLIC."tab1" '
y = 'where "SSN"=\'123-45-6789\' '
a = x + y
cursor_obj.execute(a)    

result = cursor_obj.fetchall()
print("Result set:\n", result)
con.close()

注意:SELECT是只读操作,无需调用con.commit()。

方案2:使用参数化查询(推荐)

这是psycopg2的最佳实践,既能彻底避免引号问题,又能防止SQL注入:

import psycopg2

con = psycopg2.connect(database="dbname",user="postgres",password="pwd",host="localhost",port= '5432')
cursor_obj = con.cursor()

# 使用%s作为占位符,参数单独传入execute方法
query = 'select "*" FROM PUBLIC."tab1" where "SSN" = %s'
cursor_obj.execute(query, ('123-45-6789',))    

result = cursor_obj.fetchall()
print("Result set:\n", result)
con.close()

参数化查询会自动处理字符串的引号转义,无需手动拼接SQL语句,安全性和可读性更强。

内容的提问来源于stack exchange,提问作者Murali Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 01:40:13