Обрабатывать апостроф в строке запроса, используя python - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь запросить Redshift, используя Python.Я генерирую строку запроса, которая выглядит следующим образом: я использую psycopg2 в качестве библиотеки для установления соединения.

Select lat, lon, gender from table_x where x_name = "namestring"

Если моя строка имени содержит ', строка запроса завершится неудачновыполнить.

Может кто-нибудь сказать мне, как избежать этой ошибки?У меня есть список приблизительно из 25 тысяч имен, и поэтому экранировать каждое из них с помощью \' невозможно.

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Вы можете использовать одинарные кавычки в строке и использовать параметризованную строку для подстановки ваших значений.

QUERY = """select lat, lon, gender from table_x where x_name = '{namestring}'"""
for namestring in list_of_namestrings:
    cur.execute(QUERY.format(namestring=namestring) 

Это должно решить вашу задачу, вы можете сделать запрос настолько сложным, насколько пожелаете, и сделать необходимые замены, используя .format()

0 голосов
/ 09 октября 2018

Используйте параметризованный запрос, как настоятельно рекомендуется в http://initd.org/psycopg/docs/sql.html

# somethin along the lines of this should work:

from psycopg2 import sql

names = [ "A", "McDiff", "Old'McDonal"]

for n in names:
    cur.execute(sql.SQL("Select lat, lon, gender from {} where x_name = %s")
                .format(sql.Identifier('table_x')),[n])

Это позволяет избежать проблемы самоквартирования при использовании построения параметризованного запроса вместо конкатенации строк.


См. Таблицы Бобби / Эксплойт мамы и Google SQL инъекций по другим причинам, чтобы не связывать строки.

...