SQLAlchemy的order_by中的转义字符串

时间:2019-03-19 22:37:03

标签: python python-3.x postgresql sqlalchemy

我最近在我的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中处理这种字符串插值的最佳方法是什么?

0 个答案:

没有答案