Psycopg2 - 在 where 子句中传递变量

Posted

技术标签:

【中文标题】Psycopg2 - 在 where 子句中传递变量【英文标题】:Psycopg2 - Passing variable in the where clause 【发布时间】:2020-06-11 10:28:19 【问题描述】:

我正在尝试在 Python 中运行 SQL 脚本,其中我在 where 子句中传递了一个变量,如下所示:

cursor.execute(f"""select * from table where type = variable_value""")

在上述查询中,variable_value 具有我试图在 where 子句中使用的值。但是我收到一个错误psycopg2.errors.UndefinedColumn: column "variable_value" does not exist in table

【问题讨论】:

【参考方案1】:

根据 psycopg2 文档,execute 函数将变量作为额外参数。

cursor.execute("""select * from table where type = %(value)s """, "value": variable_value)

psycopg2 user manual. 中有更多示例。

另外请仔细阅读关于SQL injection 的部分 - 要点是,您不应该在查询中引用参数,execute 函数会处理这一点,以防止注入有害的 SQL。


还要解释您遇到的错误 - 您发送的查询是比较两个标识符(typevariable_value)。 table 不包含 variable_value 列,因此出现错误。

我相信,您打算使用string interpolation 来构造查询,但您忘记了。它会像这样工作:

cursor.execute(f"""select * from table where type = 'variable_value'""")

⚠️但因为前面提到过SQL注入,不推荐使用!

【讨论】:

以上是关于Psycopg2 - 在 where 子句中传递变量的主要内容,如果未能解决你的问题,请参考以下文章

Python - 将值从一个数据框传递到另一个查询

Redshift - 在 where 子句中从 csv 传递值

如何在 LINQ where 子句中传递 func 表达式?

如何在光标的 select 语句 where 子句中传递逗号分隔值

Sql where 子句

选择不同的值,传递到 Where 子句