psycopg2 und Postgres 'Select-Abfrage' gibt None zurück

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
3quin0x
User
Beiträge: 15
Registriert: Dienstag 3. August 2010, 16:50

Hi,

Warum kommen keine Daten an, obwohl die Einträge vorhanden sind?

Code: Alles auswählen

import psycopg2 as p
c = p.connect('dbname=dbsx user=corencher password=postgres')
cu = c.cursor()
f = cu.execute("SELECT * FROM film")
Und hier noch ein paar Ausschnitte der Datenbank:

Code: Alles auswählen

                
                Liste der Relationen
 Schema |        Name        |   Typ   | Eigentümer 
--------+--------------------+---------+------------
 public | benutzer           | Tabelle | postgres
 public | film               | Tabelle | postgres
 public | filmgenre          | Tabelle | postgres
 public | filmplakat         | Tabelle | postgres
 public | hauptdarsteller    | Tabelle | postgres
 public | kategorie          | Tabelle | postgres
 public | kino               | Tabelle | postgres
und:

Code: Alles auswählen

dbsx=# select * from film;

Code: Alles auswählen

  
 f_titel   |          f_beschreibung           | f_jahr | f_dauer | f_fsk | f_startdatum 
-------------+-----------------------------------+--------+---------+-------+--------------
 Verblendung | Remake Thriller von David Fincher |   2011 |     120 |    18 | 2012-01-01
 Verblendung | TV-Thriller aus Schweden          |   2005 |     120 |    18 | 2006-01-01
 Verdamminis | Kinofilm aus Schweden             |   2006 |     120 |    18 | 2007-01-01
weiss jemand Rat?

Gruß
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Woher weißt Du, dass keine Ergebnisse zurückgeliefert werden? Du musst schon über den Cursor iterieren oder Dir ein oder alle Ergebnisse per `cursor.fetchone()` oder `cursor.fetchall()` holen. Das sollte auch in jeder Doku drin stehen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
3quin0x
User
Beiträge: 15
Registriert: Dienstag 3. August 2010, 16:50

Oh man! Stimmt ...jetzt geht es!

Danke dir für den Hinweis.

Gruß
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Du brauchst auch den Rückgabewert von `cursor.execute` nicht an einen Namen binden (`f`). Da steht eh nur ein `None` drin...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten