Datensätze durchlaufen (Postgres)

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
andi24
User
Beiträge: 56
Registriert: Freitag 5. März 2010, 11:42

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!
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Du suchst "fetchall()" ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
andi24
User
Beiträge: 56
Registriert: Freitag 5. März 2010, 11:42

Hallo Hyperion,

vielen Dank für die schnelle Antwort!

Fetchall() war auch meine erste Vermutung - leider funktioniert es auch damit nicht (mehr) :-(
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten