python - 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
如果有人有更好的方法来做它也很棒(我想也许使用装饰器来做总和)
解决方案
SQL 引擎有一个真正的游标概念。当他们收到查询时,他们会进行内部管理,一旦他们准备好返回行,他们就会返回一个游标。
客户端然后使用该游标检索同一查询中的行,并且引擎再次使用一些内部管理来记住已经发送的内容以及仍要发送的内容。
最后,客户端部分发送了一个查询和多个 fetch 来检索结果。这与发送多个查询完全不同。
如果您按查询收费,那么您应该为单个查询收费,如果有一部分与卷有关,那么该部分将随着行数的增加而增长。但不是查询部分。
推荐阅读
- python - pytorch中的conv2d函数
- c - 为什么我不能分配 i 等于 0?
- javascript - 如何调试 JavaFx WebView 传出请求?
- r - 合并两个不同大小的矩阵
- python - 如何运行以变量命名的函数?
- javascript - 将 JSON 值插入 Javascript
- javascript - 如何测试 oninput 事件处理程序
- javascript - RegEx 用于匹配句子中间的名字
- c# - 获取 KeyValuePair,其中 Key 是最小值(来自 IEnumerable)
- html - Flask Pycharm css 文件永久附加到 html