sql - 将来自 SQL 查询的列表结果列表存储在 Pandas 数据框中,其中包含数据框中的相应行
问题描述
我有一些 SQL 查询存储在 Excel 文件中。
我想在给定的 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)
解决方案
考虑构建具有相应ID的数据框列表(假设每一行都是唯一的)。然后concat
对于单个输出,最后在IDmerge
上使用原始数据框。
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")
推荐阅读
- mysql - 从 MySQL 中的无符号零填充整数列中检索整数值的正确或最有效的方法
- python - 如何将具有 1 级索引层次结构的 DataFrame 转换为 3 级索引层次结构
- c - (*exptr)->cnt 是否与 exptr->cnt 或 (*exptr).cnt 相同?
- c# - RichTextBox 光标不断变为 IBeam
- r - 将要执行的所有步骤代码一一解释
- c# - 第 1 列或第 2 列在同一个表上具有 2 个连接的实体框架
- sql-server - SQL Server CLR 方法随机超时
- javascript - 如何根据条件摆脱对象的某些属性?
- git - 吉特
自动远程跟踪分支 - python - 如何在 macOS 中为 pySerial 确定 Arduino 的端口号