我正在使用python中的psycopg2模块从postgres数据库中读取数据,我需要对一列中的所有行执行一些操作,该列有超过psycopg2万行.

我想知道cur.fetchall()会失败还是导致我的服务器宕机?(因为我的RAM可能没有那么大,无法容纳所有数据)

q="SELECT names from myTable;"
cur.execute(q)
rows=cur.fetchall()
for row in rows:
    doSomething(row)

更聪明的方法是什么?

推荐答案

fetchall()最多可获取arraysize个限制,因此为了防止对数据库的大规模攻击,您可以以可管理的批处理方式获取行,或者只需单步遍历光标,直到其耗尽:

row = cur.fetchone()
while row:
   # do something with row
   row = cur.fetchone()

Postgresql相关问答推荐

跟踪状态更改为特定值的日期

在特定值的组聚合中添加标签列作为结果

Postgres如何插入带有十进制逗号的实数?

postgres 不同类型的更新

使用 pgAdmin 4 v7.4 在 Windows 11 上全新安装 PostgreSQL 15.3-3 无法启动 - 卡在正在加载 pgAdmin 4 v7.4...

如何在 postgres 中查询键设置为空值的 jsonb 字段

EF Core添加迁移目标postgreeSQL返回无法加载类型'Microsoft.EntityFrameworkCore.Storage.IRelationalValueBufferFactoryFactory

为什么 postgresql 可以在这个查询中高效地使用索引?

如何获得区间的绝对值

如何更改几何列的 SRID?

Select 空字段

Postgresql SERIAL 的工作方式是否不同?

plpgsql:使用 2 个 OUT 参数调用函数

如何使用 postgresql 中的存储过程将数据插入表中

NOT LIKE 带有 NULL 值的行为

在 postgres 中创建超级用户

在 Postgresql 中按窗口函数结果过滤

使用 PostgreSQL 的 Linq To Sql

PostgreSQL - 如何在不同时区呈现日期?

postgresql DB中唯一键的正确数据类型是什么?