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
相关产品推荐
相关产品推荐

