Python SQLAlchemy`.fetchmany()`vs`.limit()`

Python SQLAlchemy`.fetchmany()`vs`.limit()`,python,sqlalchemy,Python,Sqlalchemy,假设查询是某个已定义的查询。据我所知,connection.executequery.fetchmanyn和connection.executequery.limitn.fetchall显然返回相同的结果集。我想知道他们中的一个是更地道的还是更重要的是更出色的 示例用法如下: query=select[census.columns.state,census.columns.pop2008-census.columns.pop2000.labelpop\u change].group\u byce

假设查询是某个已定义的查询。据我所知,connection.executequery.fetchmanyn和connection.executequery.limitn.fetchall显然返回相同的结果集。我想知道他们中的一个是更地道的还是更重要的是更出色的

示例用法如下:

query=select[census.columns.state,census.columns.pop2008-census.columns.pop2000.labelpop\u change].group\u bycensus.columns.state.order\u bydescpop\u change 结果_1=query.limit5.fetchall results\u 2=connection.executequery.fetchmanyn`results\u 2`=`results\u 1`
限制将是发送到数据库服务器的sql查询的一部分

对于fetchmany,查询的执行没有任何限制,但是客户端python代码只请求一定数量的行

因此,在大多数情况下,使用limit应该更快。

我发现,当您需要从数据库中获取非常大的数据集,但又不想将所有这些结果加载到内存中时,fetchmany非常有用。它允许您以较小的批处理结果

结果=conn.execution\u选项stream\u结果=True.execute SomeLargeTable.\uuuuu表\uuuuu.选择 尽管如此: chunk=result.fetchmany10000一次只能获取10K行 如果不是块: 打破 对于区块中的行: 在移动到下一个块之前处理每一行
不仅更快,而且更安全。根据DB-API层的不同,无限制查询最终可能会将所有行向下拉到客户端,而.fetchmany只会将这些行的子集拉到results_2列表中。