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

How to pass IN or NOT IN clause as variable to postgresql query using python

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

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

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

如果存在引号会触发错误 '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_clause 是受信任的输入...(如果这不是受信任的输入,它不会针对注入进行清理)

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

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

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