首页 > 解决方案 > 在 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 查询中使用数据框中的值。有人可以指出我正确的方向吗?谢谢!

编辑:根据我的用例,给定内存和性能限制,我无法将博客表转换为数据框。

标签: pythonsqlpostgresqlpandas

解决方案


我设法做到了这一点,而无需将数据帧转换为临时表,也无需将 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.


推荐阅读