Предоставляет ли 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)