【问题标题】:How does the chunksize parameter in pandas.read_sql() avoid loading data into memorypandas.read_sql()中的chunksize参数如何避免将数据加载到内存中
【发布时间】:2020-04-21 09:29:41
【问题描述】:

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

我在将engine (sqlalchemy) 设置为echo=True 的情况下执行此操作,以便打印出 Pandas 用于访问数据库 (postgres) 的原始 sql 命令。

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

【问题讨论】:

  • 请发布更完整的示例。一种可能性是,它将整个数据集读入 C 中的内存,然后以较小的块将其打包到 python 中。
  • 我猜它被读入 chunksize 的数据帧 - 使用 fetch - 并存储在那里直到数据完成 - 然后获取另一个块等。

标签: python pandas postgresql sqlalchemy


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    相关资源
    最近更新 更多