Python: получить экранированную строку SQL

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

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 ответа

Решение

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

cur.mogrify("SELECT * FROM foo WHERE foo.bar = %s", ("foo 'bar' \"baz",))

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

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'
Другие вопросы по тегам