Seite 1 von 1

Problem mit Fetchall

Verfasst: Freitag 30. Dezember 2016, 20:08
von Mungo1981
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

Re: Problem mit Fetchall

Verfasst: Freitag 30. Dezember 2016, 20:28
von 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.

Re: Problem mit Fetchall

Verfasst: Freitag 30. Dezember 2016, 20:38
von Mungo1981
: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:

Re: Problem mit Fetchall

Verfasst: Freitag 30. Dezember 2016, 21:27
von 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.