psycopg2报UndefinedColumn错误提示col_list列不存在如何解决
报错成因与修复方案
成因
你在Python代码中定义的col_list是Python作用域内的列表变量,直接写在SQL查询字符串中时,不会被Python解析替换为对应的列名,PostgreSQL数据库会将col_list识别为数据表的字段名,而你使用的price_NA表中不存在该字段,因此触发UndefinedColumn报错。同时你SQL中用到的z变量也未做任何声明或替换,同样会被数据库识别为无效字段。
修复方案
你需要先在Python层动态生成对应列的求平均逻辑,再拼接进SQL语句中,示例代码如下:
col_list = ['A', 'B', 'C'] # 构造每个列的求平均语句段 avg_segments = ', '.join([f'avg("{col}") AS avg_{col}' for col in col_list]) # 拼接完整SQL query_sql = f""" SELECT DATE_TRUNC('month', "DateTime") AS date_time, {avg_segments} FROM public."price_NA" GROUP BY DATE_TRUNC('month', "DateTime") ORDER BY date_time DESC """ averages = db_connection.fetch_all(query_sql)
注意事项
- 如果
col_list的内容来自用户输入等不可信来源,请勿直接使用字符串拼接的方式生成SQL,需使用数据库驱动提供的参数化查询能力,避免SQL注入风险。 - PostgreSQL对大小写敏感,大写命名的列需要用双引号包裹,否则会被自动转为小写识别,导致找不到字段。
内容的提问来源于stack exchange,提问作者Nurdin
相关产品推荐
相关产品推荐

