Python: получить экранированную строку SQL - PullRequest
2 голосов
/ 24 июня 2010

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

cur.execute("SELECT * FROM foo WHERE foo.bar = %s", (important_variable,))

Есть ли способ просто безопасно получить строку, не выполняя запрос? Например, если important_variable - строка, такая как "foo 'bar' \"baz", я бы хотел, чтобы она была экранирована соответствующим образом:

"SELECT * FROM foo WHERE foo.bar = "foo \'bar\' \"baz"

(или каково бы ни было подходящее побег, я даже не уверен).

Я использую psycopg и sqlobject.

Ответы [ 3 ]

4 голосов
/ 24 июня 2010

Посмотрите на метод mogrify для курсоров - он вернет строку после привязки переменной и покажет любые кавычки, которые он делает

cur.mogrify("SELECT * FROM foo WHERE foo.bar = %s", ("foo 'bar' \"baz",))
1 голос
/ 24 июня 2010

Вы не сказали нам, какую библиотеку или БД вы используете, но я думаю, что на ваш вопрос здесь ответят: Как явно указать строковое значение (Python DB API / Psycopg2)

0 голосов
/ 08 мая 2017

SQLObject обрабатывает экранирование / цитирование самостоятельно, но если вы хотите использовать эту функциональность:

from sqlobject.converters import sqlrepr
print(sqlrepr('SELECT * FROM foo WHERE foo.bar = "foo \'bar\' \"baz', 'postgres'))

Результат:

'SELECT * FROM foo WHERE foo.bar = "foo ''bar'' "baz'
...