首页 > 解决方案 > 在 SQL Server 查询的 WHERE 子句中引用或 INNER JOIN 一个 Pandas 数据帧值

问题描述

我有一个 pandas 数据框,我想根据其匹配的患者 ID 列从 SQL Server 表中检索患者值,称为 PatID

query = "SELECT * FROM [Hospital].[dbo].[Patient] WHERE PatID= df.PatID"

df2 = pd.read_sql(query, sql_conn)

有什么方法可以在我的数据框和 SQL WHERE 子句中的 SQL 表或列表之间加入这些匹配的 ID 值?

我在下面收到多部分标识符错误
The multi-part identifier "df.PatID" could not be bound

标签: pythonsqlsql-serverpandasjoin

解决方案


我认为生成您的 id 列表并将其连接到您的 sql 查询中是解决此问题的最简单方法

ids = ','.join(df['PatID'].unique())
query = f"SELECT * FROM [Hospital].[dbo].[Patient] WHERE PatID in ({ids})"
df2 = pd.read_sql(query, sql_conn)

小心这个解决方案。您会将 DF 中的所有 id 加载到内存中(如果您使用的是大型数据框,则会遇到麻烦)

如果您的数据框不适合内存,我想您需要将数据从 df 传输到 sql-server 并在加入后,或者从 sql-server 到 python 并在合并后传输。


推荐阅读