如何使用python将IN或NOT IN子句作为变量传递给postgresql查询

如何使用python将IN或NOT IN子句作为变量传递给postgresql查询,python,postgresql,variables,in-clause,Python,Postgresql,Variables,In Clause,如何将IN或NOT IN子句作为变量传递给查询 当我在下面的查询中传递变量时,我得到: SELECT*FROM table\u name,其中列“IN”(“产品”、“类别”) 哪个触发出现引号的错误 query_clause = 'IN' ##query_clause could equal 'NOT IN' cur = my_connection.cursor() cur.execute("SELECT * FROM table_name WHERE column_name %s ('pr

如何将
IN
NOT IN
子句作为变量传递给查询

当我在下面的查询中传递变量时,我得到:

SELECT*FROM table\u name,其中列“IN”(“产品”、“类别”)

哪个触发出现引号的错误

query_clause = 'IN' 
##query_clause could equal 'NOT IN'

cur = my_connection.cursor()
cur.execute("SELECT * FROM table_name WHERE column_name %s ('product', 'category')", (query_clause,))

您不能将sql格式字符串用于。。。只是一个普通格式的字符串

cur.execute("SELECT * FROM table_name WHERE column_name %s ('product', 'category')"%(query_clause,))

值得注意的是,这假设
query\u子句
是可信的输入。。。(如果这是不受信任的输入,它将不会针对注入进行清理)

您不能使用sql格式的字符串进行此操作。。。只是一个普通格式的字符串

cur.execute("SELECT * FROM table_name WHERE column_name %s ('product', 'category')"%(query_clause,))

值得注意的是,这假设
query\u子句
是可信的输入。。。(如果这是不可信的输入,它将不会对注射进行消毒)

是的,这是预期的。请改用布尔参数:

SELECT * FROM table_name
  WHERE (column_name IN ('product', 'category')) = %s

然后可以将true或false传递给参数。

是的,这是预期的。请改用布尔参数:

SELECT * FROM table_name
  WHERE (column_name IN ('product', 'category')) = %s

然后,您可以将true或false传递到参数中。

哦,这是一个很好的解决方案,可用于清理用户输入。谢谢您,Dietrich!这是一个非常切碎的解决方案,可以解决!!它确实很有魅力:)哦,这是一个很好的解决方案,可以清理用户输入信息。谢谢你,迪特里希!这是一个非常切碎的解决方案,可以解决!!它确实很有魅力:)谢谢你,乔兰!你是对的,如果我们使用
%s
,它将对sql注入开放。ORM通常是真正的解决方案;)谢谢你,乔兰!你是对的,如果我们使用
%s
,它将对sql注入开放。ORM通常是真正的解决方案;)