psycopg2 заменяет "% 5C" на обратную косую черту - PullRequest
0 голосов
/ 05 апреля 2019

Я пытался декодировать URL-адреса в AWS Redshift.Когда я запустил следующий код в 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

1 Ответ

1 голос
/ 06 апреля 2019

Если вы используете следующий SQL в Python, он должен работать.Я проверил это с помощью 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

Пожалуйста, дайте мне знать, если это решит вашу проблему.

...