【问题标题】:Passing a Dataframe column in where clause of a SQL (Column is of type string)在 SQL 的 where 子句中传递 Dataframe 列(列是字符串类型)
【发布时间】:2021-06-29 10:09:08
【问题描述】:

我正在尝试在 SQL 的 where 子句中传递 Pandas Dataframe 列。此列是字符串类型。

bill_id, product_name
101, prod_a
102, prod_b
103, prod_c
104, prod_d


prod_list = ','.join(["'" + str(x) + "'" for x in df['product_name'].tolist()])

我正在尝试在 SQL 的 where 子句中传递产品名称,如下所示:

query = """select prod_id, product_name from products where product_name in (%s)""" % prod_list

但是,当我知道该列表中的值有匹配项时,这似乎返回了一个空的 Dataframe

【问题讨论】:

    标签: python sql pandas


    【解决方案1】:

    处理此问题的一种常见方法是使用与输入列表对应的正确数量的占位符手动构建WHERE IN (...) 子句。然后,像往常一样将该列表绑定到语句。

    products = df['product_name'].tolist()
    where = "(%s" + ", %s"*(len(products) - 1) + ")"
    query = """
    SELECT prod_id, product_name
    FROM products
    WHERE product_name IN """
    query = query + where
    
    cursor.execute(query, products)
    

    请注意,对于包含 3 个元素的产品输入列表,上述代码 sn-p 将生成以下原始 SQL 查询:

    SELECT prod_id, product_name
    FROM products
    WHERE product_name IN (%s, %s, %s)
    

    【讨论】:

      猜你喜欢
      • 2014-09-26
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多