PowerBI使用Python脚本连接PostgreSQL时引号冲突报错求助
解决PowerBI中Python脚本连接PostgreSQL的引号冲突问题
解决方案1:正确使用双引号包裹PostgreSQL列名
在PowerBI的Python脚本中,直接用三重单引号包裹SQL语句,内部保留双引号(用于标识PostgreSQL列名),无需转义或替换为单引号。修改后的完整脚本如下:
import pandas as pd import psycopg2 # 定义PostgreSQL连接参数 conn_params = { 'host': '127.0.0.1', 'database': 'test', 'user': 'postgres', 'password': 'freya', 'port': '5432' } # 定义SQL查询(直接使用双引号标识列名) query = ''' SELECT * FROM public.address WHERE ("Enterprise_nbr", "ID") IN ( SELECT "Enterprise_nbr", MAX("ID") FROM public.address GROUP BY "Enterprise_nbr") ''' # 连接数据库并获取数据 conn = psycopg2.connect(**conn_params) data = pd.read_sql(query, conn) # 关闭连接 conn.close() # 输出数据到PowerBI print(data)
解决方案2:改用SQLAlchemy连接(更兼容PowerBI环境)
根据脚本中的警告提示,Pandas更推荐使用SQLAlchemy连接数据库,这种方式能避免引号处理的潜在问题:
import pandas as pd from sqlalchemy import create_engine # 创建SQLAlchemy引擎 engine = create_engine('postgresql://postgres:freya@127.0.0.1:5432/test') # 定义SQL查询 query = ''' SELECT * FROM public.address WHERE ("Enterprise_nbr", "ID") IN ( SELECT "Enterprise_nbr", MAX("ID") FROM public.address GROUP BY "Enterprise_nbr") ''' # 获取数据 data = pd.read_sql(query, engine) # 输出数据到PowerBI print(data)
错误原因说明
- 双引号转义问题:你之前的脚本中使用了
"(HTML实体转义),这会导致PostgreSQL无法识别为列名标识,必须直接使用原始双引号。 - 单引号的错误使用:PostgreSQL中,单引号用于包裹字符串字面量,而非列名。将列名改为单引号后,
GROUP BY 'Enterprise_nbr'会被解析为按字符串常量分组,而非按列分组,因此触发「非整数常量」语法错误。
内容的提问来源于stack exchange,提问作者Tralala
相关产品推荐
相关产品推荐

