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

Python查询AWS数据库遇unsupported format character错误求助

解决AWS数据库查询中Python字符串格式化报错的问题

嘿,这个问题我之前也碰到过!你遇到的unsupported format character ' '错误,根源是Python把你SQL语句里的%符号当成了字符串格式化的占位符(比如%s、%d这种),而不是SQL LIKE语句里的通配符。当它解析到%18 years里的%后面跟着空格时,发现空格不是合法的格式化字符,就直接报错了。

下面给你几个实用的解决办法,按推荐程度排序:

方法1:用参数化查询(最推荐,安全又省心)

参数化查询不仅能完美解决这个格式化问题,还能有效防止SQL注入,是数据库操作的最佳实践。你只需要把LIKE的匹配模式作为参数传递给read_sql就行:

# 先写好带占位符的SQL语句
sql_query = """
SELECT YearStart, LocationDesc, Topic, Question, DataValue 
FROM HealthData 
WHERE YearStart = '2018' 
  AND DataValueType = 'Crude Prevalence' 
  AND Question LIKE %s
"""
# 定义你要匹配的模式:匹配'>=18 years'结尾就用'%>=18 years',匹配' 18 years'结尾就用'% 18 years'
match_pattern = '%>=18 years'
# 传递参数执行查询
dfHealthData = pd.read_sql(sql_query, connection_string, params=[match_pattern])

方法2:转义SQL里的%符号

在Python普通字符串中,如果你想让%作为普通字符被识别,可以用%%来表示单个%。修改你的SQL语句如下:

dfHealthData = pd.read_sql("""
SELECT YearStart, LocationDesc, Topic, Question, DataValue 
FROM HealthData 
WHERE YearStart = '2018' 
  AND DataValueType = 'Crude Prevalence' 
  AND Question LIKE '%%>=18 years'
""", connection_string)

这里的%%会被Python自动转换成SQL里的单个%,这样SQL引擎就能正确识别这是LIKE的通配符了。

方法3:使用原始字符串

在SQL字符串前面加上r,把它变成原始字符串,这样Python就不会解析里面的%作为格式化占位符,直接把完整内容传给SQL引擎:

dfHealthData = pd.read_sql(r"""
SELECT YearStart, LocationDesc, Topic, Question, DataValue 
FROM HealthData 
WHERE YearStart = '2018' 
  AND DataValueType = 'Crude Prevalence' 
  AND Question LIKE '%>=18 years'
""", connection_string)

原始字符串会忽略所有转义规则和格式化逻辑,适合简单的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 11:37:49