python - 在 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
解决方案
我认为生成您的 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 并在合并后传输。
推荐阅读
- c# - 从 XML 转换后使用 Json.Net 查询 JSON 时遇到问题
- powershell - 具有 SharePoint 连接的 Powershell 作业
- flutter - 如何在 Flutter 中旋转可关闭的元素
- c++ - getchar() 避免转义序列
- python - 字符串格式化后找不到 os.system 命令
- api - 如何在自托管 Web API 中接受客户端证书
- javascript - 属性更新后更新用户上下文 - AWS Amplify
- javascript - Jquery UI Datepicker Timepicker滑块在拖动时不起作用
- regex - Oracle REGEXP_SUBSTR 前瞻和后瞻
- python - 为什么`max()`不会使用参数中的函数更改的`nonlocal` var?