我正在尝试编写一个特定于我的应用程序的高级查询构建器。我目前正在使用psycopg2,它似乎没有办法逃脱一个文字而不是一个较大的,已经写好的查询的一部分。
这是否有通用模块?我似乎没有很多(如果有的话)选择。
答案 0 :(得分:2)
你不应该 来逃避文字;这是参数化语句的用途。 psycopg2
支持plannable语句(insert / update / delete / select)和non-plannable语句(create table,create index,...)。
你应该始终使用参数化语句而不是直接将文字替换为查询字符串。
It looks like psycopg2 exposes some quoting functions too - 特别是psycopg2.extensions.adapt
。
那就是说,对于现代的PostgreSQL来说,它非常微不足道;您可以使用与标识符相同的规则,只需使用'
代替"
:
\x00
),则在零字节之前截断字符串; '
,请将其替换为''
;和'
。那就是它。反斜杠没有特殊含义,所以没有别的东西可以逃脱。
您只需要确保standard_conforming_strings
已启用(SELECT current_setting('standard_conforming_strings')
并抛出异常(如果不是),因为这些规则对于旧式字符串而言是完全错误的{{1 }}。字符串。
在E''
中拥有escape_literal
和escape_identifier
功能非常好。考虑提交补丁。
另见: