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。
还要解释您遇到的错误 - 您发送的查询是比较两个标识符(type
和 variable_value
)。 table
不包含 variable_value
列,因此出现错误。
我相信,您打算使用string interpolation 来构造查询,但您忘记了。它会像这样工作:
cursor.execute(f"""select * from table where type = 'variable_value'""")
⚠️但因为前面提到过SQL注入,不推荐使用!。
【讨论】:
以上是关于Psycopg2 - 在 where 子句中传递变量的主要内容,如果未能解决你的问题,请参考以下文章
Redshift - 在 where 子句中从 csv 传递值
如何在 LINQ where 子句中传递 func 表达式?