为什么psycopg2 execute()函数没有转义字符

时间:2015-01-26 19:21:48

标签: python database postgresql python-2.7 psycopg2

正如标题所示,我遇到了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,))函数(默认情况下,它应该至少转义字符串xy中的字符,根据文件)

EDIT2:错误图片,以便更好地澄清。 enter image description here

提前致谢:)

1 个答案:

答案 0 :(得分:1)

抱歉,我无法重现您的问题(Python 2.7和PG 9.3)。执行转义对我来说很合适,所以你应该寻找另一个语法错误来源。

>>> cur.execute(q, ["Foo';'Bar"])
>>> cur.fetchall()
[]

位置7将在" SELECT"之后,你确定你没有时髦的unicode角色而不是真实空间吗?我不知道孟加拉语,但是很多亚洲语言都有时髦的特殊空间字符,看起来就像一个普通的空间,但会引起这种问题。