python postgres 我可以 fetchall() 100 万行吗?

标签 python postgresql psycopg2 fetchall

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

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

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

更聪明的方法是什么?

最佳答案

Burhan 指出的解决方案通过仅获取单行来减少大型数据集的内存使用量:

row = cursor.fetchone()

但是,我注意到逐行获取行的速度明显变慢。我通过 Internet 连接访问外部数据库,这可能是一个原因。

事实证明,拥有服务器端游标和获取行束是最高效的解决方案。您可以更改 sql 语句(如 alecxe 答案),但也有使用 psycopg2 提供的功能的纯 python 方法:

cursor = conn.cursor('name_of_the_new_server_side_cursor')
cursor.execute(""" SELECT * FROM table LIMIT 1000000 """)

while True:
    rows = cursor.fetchmany(5000)
    if not rows:
        break

    for row in rows:
        # do something with row
        pass

您可以在 psycopg2 wiki 中找到有关服务器端游标的更多信息

关于python postgres 我可以 fetchall() 100 万行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17933344/

相关文章:

python - Python 如何比较 'int' 和 'float' 对象?

python - 如何将列表保存到 spark 中的文件?

postgresql - 如何使用其他表中的列/字段对 PostgreSQL 表进行集群

SQL 连接 : add custom constraint in JOIN clause

Python进程在执行过程中突然终止

python - 如何将约束包含在 Scipy NNLS 函数解中,使其总和为 1

python - 在 Python 中使用 Webbrowser 模块打开选项卡

sql - 在 PostgreSQL 中使用 SQL 保留关键字作为列名过滤列

python - psycopg2 无法连接到 docker 镜像

python - psycopg - 将 gzipped 数据插入 bytea 列