在 SQL Server 查询的 WHERE 子句中引用或 INNER JOIN 一个 Pandas 数据帧值 [重复]

Posted

技术标签:

【中文标题】在 SQL Server 查询的 WHERE 子句中引用或 INNER JOIN 一个 Pandas 数据帧值 [重复]【英文标题】:Refer to or INNER JOIN a Pandas dataframe value in the WHERE clause of a SQL Server query [duplicate] 【发布时间】:2021-03-28 17:30:55 【问题描述】:

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

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

df2 = pd.read_sql(query, sql_conn)

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

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

【问题讨论】:

【参考方案1】:

我认为生成您的 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 并在合并后。

【讨论】:

谢谢,我会试试的,我的数据框来自一个 820K 行的文本文件,文件大小为 107 MB

以上是关于在 SQL Server 查询的 WHERE 子句中引用或 INNER JOIN 一个 Pandas 数据帧值 [重复]的主要内容,如果未能解决你的问题,请参考以下文章