escape-строки в порядке_байя SQLAlchemy - PullRequest
0 голосов
/ 20 марта 2019

Недавно я обнаружил ошибку в своем коде SQLAlchemy + Postgres, из-за которой, если в качестве запроса Postgres будет принят специальный символ, произойдет сбой. Строка, которая прервала мой поиск, была nationality', с конечной одинарной кавычкой, которая является символом, который должен быть экранирован в Postgres с nationality''. Но я хочу защитить себя от других специальных персонажей, поэтому я получил:

query = "nationality'"
q = text("""
        defi_to_vector(mytable.name,
                       mytable.description,
                       mytable.tags,
                       mytable.meta) @@
        to_tsquery('english', :searchquery)
    """).bindparams(bindparam('searchquery', value=query))
qs = session.query(MyTable).filter(q)

Теперь это работает, и я избегаю строки, потому что я не ошибаюсь. Ошибка в следующей строке:

qs = qs.order_by(
    text("mytable.name = :query DESC").bindparams(bindparam('query', value=query))
)

Ошибка: sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) unterminated quoted string at or near "'nationality'' DESC, mytable.name) AS anon_1"

Почему первый запрос корректно экранирован, но не второй order_by. В этом смысле, как лучше всего справиться с этим типом интерполяции строк в SQLAlchemy в целом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...