2016-04-05 7 views
1

Angenommen, ich habe nur 1 GB Arbeitsspeicher und 1 TB Festplattenspeicher.Psycopg2 cursor.execute gibt einen Generator zurück

Dies ist mein Code und ich verwende eine Postgres-Datenbank.

import psycopg2 

try: 
    db = psycopg2.connect("database parameters") 
    conn = db.cursor() 
    conn.execute(query) 

    #At this point, i am running 
    for row in conn: 

für diesen Fall, ich denke, es ist sicher, dass die Anschl zu übernehmen ist ein Generator, wie ich nicht eine definitive Antwort scheine, online zu finden, und ich kann es auf meiner Umgebung nicht versuchen, wie ich das System zum Absturz nicht leisten kann.

Ich erwarte diese Abfrage, um Daten von mehr als 100 GB

ich verwende Python 2.7 und psycopg2 Bibliothek

+0

Warum eine Abfrage nicht schreiben, die nur ein Ergebnis und versuchen, '(isinstance (gen, types.GeneratorType)' gemäß [diese Antwort] gibt (http://stackoverflow.com/questions/6416538/how-to-check -if-ein-Objekt-ist-ein-Generator-Objekt-in-Python)? Das sollte Ihnen sofort sagen, wenn 'conn.execute()' einen Generator zurückgibt. –

Antwort

3

Wenn Sie einen anonymen Cursor, die Sie in Ihrem Beispiel tun, dann ist die Das gesamte Abfrageergebnis wird in den Speicher eingelesen.

Wenn Sie eine named cursor verwenden, dann wird es vom Server in Blöcken gelesen, während es die Daten durchläuft.

Verwandte Themen