pandas 在SQL的where子句中传递Dataframe列(列的类型为string)

92vpleto  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(71)

我试图在SQL的where子句中传递一个Pandas Dataframe列。此列的类型为string。

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

yhived7q

yhived7q1#

处理这个问题的一种常见方法是使用对应于输入列表的正确数量的占位符手动构建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个元素的产品输入列表,上面的代码片段将生成以下原始SQL查询:

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

相关问题