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

Mat*_*att 5 python postgresql sqlalchemy pandas

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

我在engine(sqlalchemy) 设置为的echo=True情况下执行此操作,以便它打印出 Pandas 正在使用的 db (postgres) 的原始 sql 命令。

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

Oli*_*ice 1

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

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

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