Problem mit Fetchall

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Mungo1981
User
Beiträge: 131
Registriert: Montag 27. August 2012, 19:05

Liebe Community,
Ich hab da mal ein Problem.
Ich habe eine Datenbank mit 4 Einträgen
Und folgenden Code

Code: Alles auswählen

from pgdb import connect
con = connect(database='postgres', host='localhost:5432', user='postgres', password="ThomasMungo")
cursor = con.cursor()
cursor.execute("select Mutter from Mutter where selber='" + "Root" + "';")
An = cursor.fetchall()
sammel = []               
for a in An:
    b = str(a)
    c = b.split("'")
    sammel.append(c[1])        
for sam in sammel:
    print "We:" + sam
Dieser Code lifert mir aber aus irgendeinem Grund nur die ersten zwei Einträge
Was mach ich falsch
Für jeden Tipp Dankbar

Mungo 1981
Zuletzt geändert von Anonymous am Freitag 30. Dezember 2016, 20:24, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@Mungo1981: Da sind zwei Fehler drin. Zum einen formatiert man keine Werte in SQL-Anweisungen sondern schreibt dafür Platzhalter und übergibt die Werte als zweites Argument von `execute()`.

Und dann wandelt man keine Datenstrukturen in ihre Zeichenkettendarstellung um da dann irgendwie per Zeichenkettenoperationen Werte heraus zu popeln. Arbeite mit den Tupeln oder was auch immer das Datenbankmodul pro Datensatz zurück gibt, und nicht auf deren Zeichenkettendarstellung.
Mungo1981
User
Beiträge: 131
Registriert: Montag 27. August 2012, 19:05

:K Würde ich ja gerne tun,
nur weis ich nicht wie dass dann aussehen würde. :K
:oops: Ich bin nach Jahre langer Python Apstinenz eingerostet.
Könntest du mir dabei bitte helfen :oops:
BlackJack

@Mungo1981: Das sichere übergeben von Werten steht bereits im Abschnitt „First Steps with PyGreSQL“ in der Dokumentation zu der Datenbankanbindung. Und dort steht auch das die Datenbankzeilen als „named tuple“ zurückgegeben werden. `collections.namedtuple` ist in der Python-Standardbibliothek dokumentiert. Das ist von `tuple` abgeleitet und das sollte grundsätzlich kennen, denn das ist einer der Grunddatentypen in Python, ohne den kaum ein Programm auskommt.
Antworten