Python - 将值从一个数据框传递到另一个查询
Posted
技术标签:
【中文标题】Python - 将值从一个数据框传递到另一个查询【英文标题】:Python - Passing values from one Dataframe to another query 【发布时间】:2019-07-10 05:18:34 【问题描述】:我正在尝试在 Python 中执行 SQL 查询,其中我试图将 Dataframe 的输出作为 where 子句的一部分传递。
import psycopg2
import pandas as pd
con = psycopg2.connect (db1_details)
con1 = psycopg2.connect (db2_details)
这已经产生了所有的账单
data = pd.read_sql("""select bill_id from sales where date > '2019-01-01'""", con = con)
现在我正在尝试提取在上述查询中获得的2019-01-01
之后创建账单并存储在data
中的所有客户
customer_details = f"""select cust_name, bill_id from customers where bill_id in data"""
我不确定如何将数据帧中的值作为循环的一部分传递给另一个查询。
编辑:
data.head()
的视图
bill_id
1001
1002
1003
1006
1007
【问题讨论】:
请展示数据数据框结构 显示 data.head() @tawab_shakeel,已更新帖子以查看数据框的头部。它只有一列带有bill_id
【参考方案1】:
如果列名是 bill_id
并且需要为每个唯一客户循环:
for cust in data['bill_id'].unique():
customer_details = f"""select cust_name, bill_id from customers where bill_id in (cust)"""
print (customer_details)
select cust_name, bill_id from customers where bill_id in (1001)
select cust_name, bill_id from customers where bill_id in (1002)
select cust_name, bill_id from customers where bill_id in (1003)
select cust_name, bill_id from customers where bill_id in (1006)
select cust_name, bill_id from customers where bill_id in (1007)
data = pd.read_sql(customer_details, con=con1)
或者如果需要所有独特的客户:
all_data = ', '.join(data['bill_id'].unique().astype(str))
customer_details = f"""select cust_name, bill_id from customers where bill_id in (all_data)"""
print (customer_details)
select cust_name, bill_id from customers where bill_id in (1001, 1002, 1003, 1006, 1007)
data = pd.read_sql(customer_details, con=con1)
【讨论】:
感谢您。你能帮我看看我如何通过query
查询con1
@jezrael 您应该从两个解决方案中的数据中获取唯一的 bill_ids
@tawab_shakeel - 与第一个解决方案相同,如果一个值没有(1001, )
但(1001)
@jezrael 你是对的我已经检查了你的答案是对的【参考方案2】:
-
从数据中获取唯一的 bill_ids
将这些列表转换为元组并将其发送到查询中
unique_bill_id = list(data["bill_id"].unique())
if len(unique_bill_id ) == 1:
unique_bill_id.append(unique_key[0])
query = "select cust_name, bill_id from customers where bill_id in ;".format(tuple(unique_bill_id))
df = pd.read_sql_query(query,con=con1)
【讨论】:
感谢您。你能帮我看看我如何通过query
查询con1
没问题@scottmartin 支持或批准那些您认为有帮助的答案,以便更多人可以从中受益【参考方案3】:
你可以像这样加入两张桌子
select distinct c.cust_name, c.bill_id
from customers as c
join sales as s on c.bill_id=s.bill_id and s.date > '2019-01-01'
这样会更有效率。
【讨论】:
以上是关于Python - 将值从一个数据框传递到另一个查询的主要内容,如果未能解决你的问题,请参考以下文章