我在Excel文件中存储了一些SQL查询。
我想在给定的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)
但是目标是将结果及其关联的查询/行存储在一起。以下显然是错误的,因为循环仅存储最后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)
答案 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")