在Python中的psycopg2中指定execute()参数时,如下所示:
cursor.execute('SELECT * FROM %s', ("my_table", ))
我收到了这个错误:
psycopg2.ProgrammingError: syntax error at or near "'my_table'"
LINE 1: SELECT * FROM 'my_table'
我做错了什么?看起来psycopg2正在向查询添加单引号,而这些单引号导致语法错误。
如果我不使用参数,它可以正常工作:
cursor.execute('SELECT * FROM my_table')
答案 0 :(得分:15)
我认为像这样的参数化语句应该与 values 一起使用,而不是与表名(或SQL关键字等)一起使用。所以你基本上没有运气了。
但是,请不要担心,因为此机制旨在防止SQL注入,并且您通常知道在代码编写时要访问哪个表,因此很可能有人可能会注入恶意代码。然后继续写下字符串中的表格。
如果出于某些(可能是有悖常理的)原因,您可以将表名称保持参数:
例如:
cursor.execute(
'SELECT * FROM %s where %s = %s'
% ("my_table", "colum_name", "%s"), #1
("'some;perverse'string;--drop table foobar")) #2
#1
:此时让第三个%s替换为另一个'%s',以便以后通过psycopg2进行处理
#2
:这是psycopg2正确引用并在原始字符串中放置而不是第三个'%s'的字符串