我可以在 SQLAlchemy ORM 上使用stream_results吗?

Yuk*_*oue 6 python sqlalchemy

https://docs.sqlalchemy.org/en/13/core/connections.html#sqlalchemy.engine.Connection.execution_options.params.stream_results

如上述文档所述,对于连接或语句,结果可以是“流式传输”的。

例如

records = connection.execution_options(stream_results=True).execute(
  'select * from large_table'
)
for rec in records:
    process_it(rec)
Run Code Online (Sandbox Code Playgroud)

在支持此选项的 RDB 连接器上,上述命令将根据需要获取行,从而节省内存使用。


现在我有了Session可以连接数据库和查询对象的类。

我想执行以下命令,并且还想“流式传输”行获取。

records = connection.execution_options(stream_results=True).execute(
  'select * from large_table'
)
for rec in records:
    process_it(rec)
Run Code Online (Sandbox Code Playgroud)

问题:

  • 是否可以针对 ORM 查询应用stream_results选项?

J_H*_*J_H 7

对于stream_results=True行为类型,您需要 ORMyield_per(count)方法。当获取非常大的结果集时,这可以节省内存。

https://docs.sqlalchemy.org/en/13/orm/query.html#sqlalchemy.orm.query.Query.yield_per

count一次仅产生行。