gpt4 book ai didi

python - 为什么带有 SQL 查询参数的 psycopg2 cursor.execute() 会导致语法错误?

转载 作者:太空狗 更新时间:2023-10-29 22:08:20 27 4
gpt4 key购买 nike

在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')

最佳答案

我相信像这样的参数化语句应该与一起使用,而不是表名(或 SQL 关键字等)。所以你基本上不走运。

但是请不要担心,因为此机制旨在防止 SQL 注入(inject),并且您通常在编写代码时就知道要访问的表,因此很少有人可能会注入(inject)恶意代码。只需继续将表格写入字符串即可。

如果出于某些(可能是不正当的)原因,您将表名保持为参数化:

  1. 如果表名来自您的程序(例如字典或类属性),则执行通常的字符串替换。
  2. 如果表名来自外部世界(想想“用户输入”):要么不这样做,要么完全信任用户并应用之前的方法 1。

例如:

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' 的字符串

关于python - 为什么带有 SQL 查询参数的 psycopg2 cursor.execute() 会导致语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9354392/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com