首页 > 解决方案 > python - fetchmany每次都连接到数据库

问题描述

我需要从 AWS Athena (500K+) 进行大查询。如果我的查询结果有 X 行,并且我使用 fetchmany 一次获取 Y 行,直到我获得所有行,它是否会在每次使用 fetchmany 时连接到数据库?我问是因为在 Athena 中,每个查询都需要花钱,而且我更喜欢做一个大查询而不是多个小查询。谢谢。

def get_df
    while sum_fetch < limit
        batch_result = pd.DataFrame(cursor.fetchmany(FETCH_SIZE), columns=COLUMN_NAMES)
        df = df.append(pd.DataFrame(batch_result))
        sum_fetch += FETCH_SIZE
    return df

如果有人有更好的方法来做它也很棒(我想也许使用装饰器来做总和)

标签: pythonamazon-athena

解决方案


SQL 引擎有一个真正的游标概念。当他们收到查询时,他们会进行内部管理,一旦他们准备好返回行,他们就会返回一个游标。

客户端然后使用该游标检索同一查询中的行,并且引擎再次使用一些内部管理来记住已经发送的内容以及仍要发送的内容。

最后,客户端部分发送了一个查询和多个 fetch 来检索结果。这与发送多个查询完全不同。

如果您按查询收费,那么您应该为单个查询收费,如果有一部分与卷有关,那么该部分将随着行数的增加而增长。但不是查询部分。


推荐阅读