जैसा कि आपने अपने प्रश्न में उल्लेख किया है, लेकिन मैं भविष्य के पाठकों के लिए यहां दोहराऊंगा:Django के सार्वजनिक एपीआई को दरकिनार किए बिना स्पष्ट रूप से नामित कर्सर का उपयोग करना भी संभव है:
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)