python - 在 SQL 连接中使用 Pandas 数据框
问题描述
我正在尝试使用我在 Postgres 数据库中的外部表对数据框的内容执行 SQL 连接。
这是 Dataframe 的样子:
>>> df
name author count
0 a b 10
1 c d 5
2 e f 2
我需要使用如下所示的 Postgres 表加入它:
TABLE: blog
title author url
a b w.com
b b x.com
e g y.com
这是我正在尝试做的,但这似乎不是查询的正确语法:
>>> sql_join = r"""select b.*, frame.* from ({0}) frame
join blog b
on frame.name = b.title
where frame.owner = b.owner
order by frame.count desc
limit 30;""".format(df)
>>> res = pd.read_sql(sql_join, connection)
我不确定如何在 sql 查询中使用数据框中的值。有人可以指出我正确的方向吗?谢谢!
编辑:根据我的用例,给定内存和性能限制,我无法将博客表转换为数据框。
解决方案
我设法做到了这一点,而无需将数据帧转换为临时表,也无需将 SQL 读取到博客表中的数据帧中。
对于面临同样问题的其他人,这是使用各种虚拟表来实现的。
这是我最终的 sql 查询的样子:
>>> inner_string = "VALUES ('a','b',10), ('c','d',5), ('e','f',2)"
>>> sql_join = r"""SELECT * FROM blog
JOIN ({0}) AS frame(title, owner, count)
ON blog.title = frame.title
WHERE blog.owner = frame.owner
ORDER BY frame.count DESC
LIMIT 30;""".format(inner_string)
>>> res = pd.read_sql(sql_join, connection)
您可以使用字符串操作将数据框中的所有行转换为一个类似于inner_string
.
推荐阅读
- marklogic - MarkLogic CPF- 管道中的条件模块
- angular - Angular 6 - 如何从 URL 下载网页版和移动版的文件?
- php - "/" 重定向到 php 应用程序主目录而不是主机主目录
- dji-sdk - 我可以使用 DJI Drone 模拟器测试我的 DJI SDK for Windows 10 应用程序,而不会有运行真正 DJI Drone 的风险吗?
- firebase - 如何将文档添加到云 Firestore 中的集合
- javascript - doc.data() 返回空对象属性,但它在 console.log 上
- node.js - 在 Angular 中,如何解析和提取具有复杂结构 (JSON) 的 HTTP 响应?
- java - 如何使用带有 Spring Security 5.1+ 的 google OIDC 对用户进行身份验证
- javascript - 如何将我的输入字段和按钮向上对齐以使其与其他按钮内联?
- google-analytics - gatsby-plugin-google-analytics 允许回调或设置要求选项