SQLAlchemy экранировать / дезинфицировать переменные без использования ORM / параметров - PullRequest
1 голос
/ 15 января 2020

Предоставляет ли SQLAlchemy функцию для безопасного цитирования / экранирования литерала при построении необработанных запросов? Я прочитал документы и ничего не видел, не уверен, что это защищенный внутренний файл?

Я знаю, что параметризованные операторы - правильный способ справиться с этим, но из-за крайнего случая / ошибка с pyodbc / ms sql -driver это не вариант. В результате я вынужден выполнить скомпилированный оператор ORM с literal_binds=True. В худшем случае я бы ограничил ввод до AZ | 0-9 или проявил творческий подход с использованием связанных подзапросов / псевдонимов, но я бы предпочел этого избежать.

например,

variable = sqlalchemy.escape_text(input("User Input")) // something like this
q = session.query(MyObj).filter(MyObj.colA == variable))
connection.execute(q.selectable.compile(compile_kwargs={'literal_binds': True}), bind=session.bind)
...