psycopg2 эквивалент mysqldb.escape_string? - PullRequest
20 голосов
/ 29 сентября 2010

Я передаю некоторые значения в поле символов postgres, используя psycopg2 в Python.Некоторые из строковых значений содержат точки, косые черты, кавычки и т. Д.

С MySQL я просто экранирую строку с

MySQLdb.escape_string(my_string)

Есть ли эквивалент для psycopg2?

Ответы [ 4 ]

28 голосов
/ 06 октября 2010

Экранирование происходит автоматически, вам просто нужно позвонить:

cursor.execute("query with params %s %s", ("param1", "pa'ram2"))

(обратите внимание, что оператор python% не используется) и значения будут правильно экранированы.

Вы можете вручную экранировать переменную, используя extensions.adapt(var), но это может привести к ошибкам и не учитывать кодировку соединения: она не должна использоваться в обычном клиентском коде.

7 голосов
/ 15 июля 2013

Как сказал Пиро, побег происходит автоматически.Но есть метод, который также возвращает полный sql, экранированный psycopg2, используя cursor.mogrify (sql, [params])

1 голос
/ 15 мая 2015

В маловероятном случае, когда параметры запроса недостаточны, и вам нужно самостоятельно экранировать строки, вы можете использовать экранированные строковые константы Postgres вместе с repr Python (поскольку правила Python для экранирования не-asciiи символы Юникода такие же, как у Postgres):

def postgres_escape_string(s):
   if not isinstance(s, basestring):
       raise TypeError("%r must be a str or unicode" %(s, ))
   escaped = repr(s)
   if isinstance(s, unicode):
       assert escaped[:1] == 'u'
       escaped = escaped[1:]
   if escaped[:1] == '"':
       escaped = escaped.replace("'", "\\'")
   elif escaped[:1] != "'":
       raise AssertionError("unexpected repr: %s", escaped)
   return "E'%s'" %(escaped[1:-1], )
0 голосов
/ 29 сентября 2010

Psycopg2 не имеет такого метода. Он имеет расширение для адаптации значений Python к объектам ISQLQuote, и эти объекты имеют метод getquoted() для возврата PostgreSQL-совместимых значений.

См. Этот блог для примера того, как его использовать:

Заключение связанных значений в операторы SQL с использованием psycopg2

Обновление 2019-03-03: изменена ссылка на archive.org, поскольку через девять лет оригинал больше не доступен.

...