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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:36:25