Python中Snowflake SQL含转义字符语句的执行问题
Python中Snowflake LIKE语句的正确转义方式
问题根源
你当前的SQL语句在Python中执行时出现语法错误,核心原因是Python字符串转义与Snowflake SQL转义的层级冲突:
- 原语句中
ESCAPE '\\'在Python解析后,会变成ESCAPE '\'发送给Snowflake; - Snowflake会将
\视为转义符,转义了后面的单引号,导致SQL字符串未闭合,最终触发unexpected '_'的语法错误。
你提到SQL中的每个反斜杠都重复了两次,但这只处理了LIKE子句中的转义,没覆盖ESCAPE子句的完整转义逻辑。
正确解决方案
方案1:使用Python原始字符串(推荐)
原始字符串(带r前缀)会跳过Python的转义处理,直接将字符串原样传递给Snowflake。根据Snowflake的配置调整反斜杠:
# 若Snowflake未启用STRICT_STRING_ESCAPE参数,直接写单个反斜杠 sql = r"WHERE SOMECOLUMN LIKE 'product\_%\_season\_s%\_premium' ESCAPE '\'" # 若Snowflake启用了STRICT_STRING_ESCAPE,需将ESCAPE的反斜杠写成两个 sql = r"WHERE SOMECOLUMN LIKE 'product\_%\_season\_s%\_premium' ESCAPE '\\'"
方案2:使用普通字符串,双重转义反斜杠
每个反斜杠需要写4次:Python解析时将4个\\转为2个,Snowflake再将2个转为1个,最终得到正确的转义字符:
sql = "WHERE SOMECOLUMN LIKE 'product\\\\_%\\\\_season\\\\_s%\\\\_premium' ESCAPE '\\\\'"
验证逻辑
最终传递给Snowflake的正确SQL语句应该是:
WHERE SOMECOLUMN LIKE 'product_%_season_s%_premium' ESCAPE ''
(如果Snowflake启用严格转义,则ESCAPE子句应为ESCAPE '\\')
内容的提问来源于stack exchange,提问作者Mike de H
相关产品推荐
相关产品推荐

