psycopg2 用 '\' 反斜杠替换 '%5C'
Posted
技术标签:
【中文标题】psycopg2 用 \'\\\' 反斜杠替换 \'%5C\'【英文标题】:psycopg2 replace '%5C' with '\' backslashpsycopg2 用 '\' 反斜杠替换 '%5C' 【发布时间】:2019-04-05 19:05:08 【问题描述】:我尝试解码 AWS Redshift 中的 URL。当我在 SQL Workbench 上运行以下代码时,一切正常。但是,当我通过 psycopg2 使用相同的代码时,它给了我错误消息ProgrammingError: syntax error at or near "D" LINE 35: ,'%5D',']')) as ...
代码:
SELECT *,
REPLACE(LEFT(CONCAT(SUBSTRING(REGEXP_SUBSTR(t1.url, 'keywords=([a-zA-Z0-9]+[%+])*[a-zA-Z0-9]*') from 10), t1.extracted_search_value), 100),'%5C','\\') as parsed_search from new_table t1
LIMIT 10
【问题讨论】:
我想知道 '%' 字符是否被视为通配符。在 Oracle 中,% 是通配符,但仅在使用 LIKE 时。不确定这是否可行,但尝试使用百分比字符的 ascii 值。chr(37) || '5C'
而不是 '%5C'
。谁知道呢,也许这就是你悲伤的原因。
【参考方案1】:
如果您在 python 中使用以下 SQL,它应该可以工作。我已经使用 psycopg2 对其进行了测试
基本上你的 SQL 中有两个反斜杠,Postgres 文档有
如果您需要放置文字反斜杠,请使用 \\
我已将您代码中的 \\
替换为 \\\\
SELECT *,
REPLACE(LEFT(CONCAT(SUBSTRING(REGEXP_SUBSTR(t1.url, 'keywords=([a-zA-Z0-9]+[%+])*[a-zA-Z0-9]*') from 10),
t1.extracted_search_value), 100),'%5C','\\\\') as parsed_search from new_table t1
LIMIT 10
更多解释请参阅第 9.7.3 节。以下链接上的 POSIX 正则表达式 https://www.postgresql.org/docs/current/functions-matching.html#FUNCTIONS-LIKE
如果这能解决您的问题,请告诉我。
【讨论】:
以上是关于psycopg2 用 '\' 反斜杠替换 '%5C'的主要内容,如果未能解决你的问题,请参考以下文章