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 - 将值从一个数据框传递到另一个查询的主要内容,如果未能解决你的问题,请参考以下文章

将值从表单传递到表单

将值从文本框传递到 SQL 查询中的“TOP n”子句

将值从一个组件传递到另一个组件

如何将值从一个php页面传递到另一个? [复制]

通过 Laravel 中的 AJAX 发布请求将值从一个视图传递到另一个视图

无法将值从一个意图传递到另一个意图