我最近在SQLAlchemy+Postgres代码中发现了一个bug,如果传递一个特殊字符作为查询,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"
为什么第一个查询被正确转义,而第二个查询却没有转义。从这个意义上说,在SQLAlchemy中处理这种字符串插值的最佳方法是什么?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐