【问题标题】:How to pass IN or NOT IN clause as variable to postgresql query using python如何使用 python 将 IN 或 NOT IN 子句作为变量传递给 postgresql 查询
【发布时间】:2016-10-28 08:24:26
【问题描述】:

如何将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,))

【问题讨论】:

    标签: python postgresql variables in-clause


    【解决方案1】:

    是的,这是意料之中的。请改用布尔参数:

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

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

    【讨论】:

    • 哦,这是清理用户输入的好方法
    • 谢谢迪特里希!这是一个非常巧妙的解决方案,可以解决!它确实像魅力一样工作:)
    【解决方案2】:

    你不能为此使用 sql 格式字符串...只是一个普通的格式字符串

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

    值得注意的是,假设query_clause 是受信任的输入...(如果这不是受信任的输入,它将不会针对注入进行消毒)

    【讨论】:

    • 谢谢乔兰!你是对的,如果我们使用%s,它将对sql注入开放。
    • ORM 通常是真正的解决方案 ;)
    猜你喜欢
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    • 2018-06-18
    • 2015-04-09
    • 2012-01-17
    • 1970-01-01
    相关资源
    最近更新 更多