PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie kann ich serverseitige Cursor mit Django und psycopg2 verwenden?

Wie Sie in Ihrer Frage erwähnen, aber ich werde es hier für zukünftige Leser wiederholen:Es ist auch möglich, explizit benannte Cursor zu verwenden, ohne die öffentliche API von Django zu umgehen:

from django.db import connection, transaction

with transaction.atomic(), connection.cursor() as cur:
    cur.execute("""
        DECLARE mycursor CURSOR FOR
        SELECT *
        FROM giant_table
    """)
    while True:
        cur.execute("FETCH 1000 FROM mycursor")
        chunk = cur.fetchall()
        if not chunk:
            break
        for row in chunk:
            process_row(row)