我正在遍历pd.read_sql(query, engine, chunksize=10000)
的结果
我这样做时engine
(sqlalchemy(设置为echo=True
,以便它打印出Pandas用来点击db(postgres(的原始sql命令。
打印输出显示,Pandas 只用我写的查询命中数据库一次,没有任何修改。考虑到这一点,Pandas 怎么可能以块的形式遍历该查询的完整输出,同时又不一次将所有块存储在内存中?
单个 SQL 查询使数据库知道需要返回哪些结果。
实际上,返回结果由驱动程序(可能是 python 的 psycopg2(处理的通信协议处理。
该协议允许流式处理结果集。然后,可以在驱动程序和/或 pandas 层对这些结果进行分块,而无需执行多个 SQL 语句。