将来自SQL查询的列表结果列表存储在Pandas数据框中,并在数据框中包含相应的行

时间:2019-05-07 21:07:12

标签: sql pandas sqlalchemy

我在Excel文件中存储了一些SQL查询。

The original SQL Scripts

我想在给定的SQL数据库上运行它们,然后将来自SQL查询的结果以及原始数据帧存储在单独的数据帧中。

from sqlalchemy import create_engine
import pymssql
engine = create_engine('connection string')

首先,我尝试将结果存储在可以正常工作的临时数据帧中。每个这些SQL查询都提供3-4行输出。

df_result = pd.DataFrame()
for row in df.itertuples(): 
    df_temp = pd.read_sql(row.SQL_Query, engine) 
    df_result = df_result.append(df_temp)

The results dataframe

但是目标是将结果及其关联的查询/行存储在一起。以下显然是错误的,因为循环仅存储最后3次的结果

df_result = pd.DataFrame()
for row in df.itertuples(): 
    df_temp = pd.read_sql(row.SQL_Query, engine) 
    df_result = pd.merge(df, df_temp, left_index=True, right_index=True)

Incorrect Merge Results

1 个答案:

答案 0 :(得分:0)

考虑使用相应的 ID (假定每行都是唯一的)构建数据帧列表。然后concat用于单个输出,最后merge带有 ID 上的原始数据帧。

df_list = [pd.read_sql(row.SQL_Query, engine).assign(ID=row.ID) for row in df.itertuples()]

sql_df = pd.concat(df_list)

df_result = pd.merge(df, sql_df, on="ID")
相关问题