pandas.read_sql() 中的 chunksize 参数如何避免将数据加载到内存中



我正在遍历pd.read_sql(query, engine, chunksize=10000)的结果

我这样做时engine(sqlalchemy(设置为echo=True,以便它打印出Pandas用来点击db(postgres(的原始sql命令。

打印输出显示,Pandas 只用我写的查询命中数据库一次,没有任何修改。考虑到这一点,Pandas 怎么可能以块的形式遍历该查询的完整输出,同时又不一次将所有块存储在内存中?

单个 SQL 查询使数据库知道需要返回哪些结果。

实际上,返回结果由驱动程序(可能是 python 的 psycopg2(处理的通信协议处理。

该协议允许流式处理结果集。然后,可以在驱动程序和/或 pandas 层对这些结果进行分块,而无需执行多个 SQL 语句。