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'的主要内容,如果未能解决你的问题,请参考以下文章

Java用'(撇号/单引号)和\(反斜杠)一起替换问题

在 REST WCF URL 中使用反斜杠 (%5c)

shell脚本如何把反斜杠替换成斜杠反斜杠,比如2014\/5\/10变成2014/5/10,急用谢谢!

python unicode用空字符串替换反斜杠u

如何在 JavaScript 中转义反斜杠?

斜杠/,反斜杠,斜杠/,点斜杠./,点点斜杠../