SQLAlchemy `.fetchmany()` 与 `.limit()`

Tob*_*fin 5 python sqlalchemy

假设query是一些已经定义的查询。据我所知,connection.execute(query).fetchmany(n)显然connection.execute(query).limit(n).fetchall()返回相同的结果集。我想知道其中之一是否更惯用,或者 \xe2\x80\x94 更重要的是 \xe2\x80\x94 性能更高?

\n\n

示例用法如下:

\n\n
query = select([census.columns.state, (census.columns.pop2008 - census.columns.pop2000).label("pop_change")]).group_by(census.columns.state).order_by(desc("pop_change"))\nresults_1 = query.limit(5).fetchall()\nresults_2 = connection.execute(query).fetchmany(n)    #`results_2` = `results_1`\n
Run Code Online (Sandbox Code Playgroud)\n

Pet*_*hos 3

limit 将把 sql 查询的一部分发送到数据库服务器。

使用 fetchmany,查询的执行没有任何限制,但客户端(python 代码)仅请求一定数量的行。

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

  • 不仅更快,而且“更安全”。根据 DB-API 层,无限制的查询最终可能会将所有行拉到客户端,而“.fetchmany”只是将这些行的子集拉到“results_2”列表中。 (2认同)