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'