正如标题所示,我遇到了psycopg2无法转义传入执行函数的字符的问题。
query = "SELECT * FROM product_sections WHERE section_path=%s"
cur.mogrify(query, ["Android'Test!"])
OR
query = "SELECT * FROM product_sections WHERE section_path=%s"
cur.mogrify(query, ("Android'Test!", ))
cur.mogrify()
的输出是:
SELECT * FROM product_sections WHERE section_path='Android''Test!'
这是完全错误的。我想逃避所有这些字符(',;:!_),但psycopg2
由于某种原因没有这样做。
ProgrammingError: syntax error at position 7
LINE 1: SELECT * FROM product_sections WHERE section_path='Android''...
EDIT1:我想要的是,如果用户输入任何字符:; ' ! _
或其他任何字符(可能会产生SQL注入),字符应自动转义。我浏览了psycopg2
个文档,他们说要使用cursor.execute(query, (x,y,))
函数(默认情况下,它应该至少转义字符串x
,y
中的字符,根据文件)
EDIT2:错误图片,以便更好地澄清。
提前致谢:)
答案 0 :(得分:1)
抱歉,我无法重现您的问题(Python 2.7和PG 9.3)。执行转义对我来说很合适,所以你应该寻找另一个语法错误来源。
>>> cur.execute(q, ["Foo';'Bar"])
>>> cur.fetchall()
[]
位置7将在" SELECT"之后,你确定你没有时髦的unicode角色而不是真实空间吗?我不知道孟加拉语,但是很多亚洲语言都有时髦的特殊空间字符,看起来就像一个普通的空间,但会引起这种问题。