Seite 1 von 1

Datensätze durchlaufen (Postgres)

Verfasst: Mittwoch 26. Januar 2011, 17:32
von andi24
Hallo zusammen,

ich habe bisher immer auf folgende Weise eine Datenbankabfrage ausgeführt und bin dann die Datensätze durchlaufen:

Code: Alles auswählen

sql="SELECT * FROM kunden"
cursor.execute(sql)
row = cursor.fetchone()

for row in cursor:
     print row
Plötzlich klappt das ganze aber nicht mehr: Ich bekomme zwar keinen Fehler zurück, aber leider bei "print row" auch keine Ausgabe (bzw. nur einen Teil der Datensätze). Die Variable row hat jedoch eine Länge (über len(row) getestet). Ich habe auch testweise mal die sql-Variable ausgeben lassen und diese Ausgabe dann mal direkt in der Datenbank getestet -> alles ok.

Schreibe ich das ganze so:

Code: Alles auswählen

while row:
   print row
   row=cursor.fetchone()
Funktioniert es.

Prinzipiell könnte ich ja mit der Lösung leben, aber mein Pythonbuch sagt, dass die erste Lösung für größere Datenmengen besser wäre.

Weiß jemand, woran das liegen könnte?

Vielen Dank für jeden Hinweis!

Re: Datensätze durchlaufen (Postgres)

Verfasst: Mittwoch 26. Januar 2011, 18:15
von Hyperion
Du suchst "fetchall()" ;-)

Re: Datensätze durchlaufen (Postgres)

Verfasst: Donnerstag 27. Januar 2011, 13:57
von andi24
Hallo Hyperion,

vielen Dank für die schnelle Antwort!

Fetchall() war auch meine erste Vermutung - leider funktioniert es auch damit nicht (mehr) :-(

Re: Datensätze durchlaufen (Postgres)

Verfasst: Donnerstag 27. Januar 2011, 14:29
von /me
andi24 hat geschrieben:Fetchall() war auch meine erste Vermutung - leider funktioniert es auch damit nicht (mehr) :-(
Zeig mal Code.

Code: Alles auswählen

cursor.execute ('SELECT foo FROM bar')
rows = cursor.fetchall ()
for row in rows:
    print row
Wenn so etwas "nicht funktioniert", also keine Ausgabe und keinen Fehler liefert, dann ist die Tabelle einfach leer.

Re: Datensätze durchlaufen (Postgres)

Verfasst: Donnerstag 27. Januar 2011, 14:31
von Hyperion
andi24 hat geschrieben: Fetchall() war auch meine erste Vermutung - leider funktioniert es auch damit nicht (mehr) :-(
"Funktioniert nicht" ist keine dolle Aussage. Was klappt denn nicht? Kommt es zu einem Fehler? Kommt es zu keiner Ausgabe?

Ohne Code kann man dazu nichts sagen.

Eine extrem einfache Vermutung wäre, dass Du entweder nichts ausgibst, die Verbindung gar nicht geöffnet ist oder sogar, dass keine Datensätze in der Tabelle enthalten sind ;-)

Wie gesagt, ohne Code und exakter Fehlerbschreibung / Meldung kann man nichts weiter dazu sagen.