psycopg2 cursor fetchmany方法行为疑问:与分页查询的区别
psycopg2中fetchmany与分页查询的行为差异解答
结论先行:fetchmany只会发起一次数据库查询,不会像分页查询那样多次请求
当你执行cursor.execute()运行查询语句后,数据库就已经完成了整个查询的计算,生成了完整的结果集。之后调用fetchmany(size)只是从psycopg2的本地缓冲区(或数据库与客户端的连接缓冲区)中取出指定行数的数据,全程不需要再向数据库发起新的查询请求。
拿你说的10000行数据举例:
- 执行一次
execute后,数据库已经准备好所有10000行结果 - 分4次调用
fetchmany(3000),只是把这10000行数据分4批传输到Python进程,不会重复执行查询逻辑
而传统的分页查询(比如用LIMIT/OFFSET多次执行SQL),每次调用都要重新执行一次查询,数据库每次都得重新扫描表、计算结果集,性能和资源消耗远不如fetchmany。
所以你完全可以放心用fetchmany,它既解决了fetchall一次性加载大量数据占内存的问题,又保持了单次查询的高效性,不会产生多次查询请求。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

