Problemchen mit Variablenbearbeitung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Pixelpirat
User
Beiträge: 4
Registriert: Mittwoch 28. November 2007, 15:42

Mittwoch 28. November 2007, 16:33

Hallo

ich schreibe gerade mein 1. python script und stehe vor einem kleinen Problem:
Ich lese Datensätze aus eine DB aus.
Dafür habe ich folgenden Syntax verwendet.

Code: Alles auswählen

sql_fields = 'geb_tag','geb_monat','geb_jahr','anrede','vorname','nachname','mail'
sql_query = "select "+','.join(sql_fields)+" from biz_kunden where
Das funktioniert einwandfrei.
Ksql_fields = 'geb_tag,geb_monat,geb_jahr,anrede,vorname,nachname,mail'
Jedoch hänge ich an der Ausgabe:

Code: Alles auswählen

for result in result:
#    sql_fields = result
    print "Datensatz:", result
    print "Vorname:", result[4]
    print "Nachname:" result[5]
Bringt das Ergebnis.

Dieser Code hier mach mir das Problem: sql_fields = result
Gerne würde ich diesen Code verwenden:

Code: Alles auswählen

for result in result:
    sql_fields = result
    print "Datensatz:", result
    print "Vorname:", vorname
    print "Nachname:" nachname
Wenn ich sql_fields durch geb_tag, geb_monat, ..... ersetze würde es gehen Wie bekomme ich sql_fields gesplittet, das ich diese Variable verwenden kann?

Danke für Eure Hilfe.

Ralf
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Mittwoch 28. November 2007, 16:46

Pixelpirat hat geschrieben:Wie bekomme ich sql_fields gesplittet, das ich diese Variable verwenden kann?
wenn ich dich richtig verstehe, ist was du suchst, folgendes

Code: Alles auswählen

for result in results:
   geb_tag, geb_monat, geb_jahr, anrede, vorname, mail = result
   print "Datensatz:", result
   print "Vorname: ", vorname
wenn du result nicht brauchst, kannst du das auch direkt im for-kopf machen:

Code: Alles auswählen

for geb_tag, geb_monat, geb_jahr, anrede, vorname, mail in results:
  ...
Pixelpirat
User
Beiträge: 4
Registriert: Mittwoch 28. November 2007, 15:42

Mittwoch 28. November 2007, 16:56

keppla hat geschrieben:wenn ich dich richtig verstehe, ist was du suchst, folgendes

Code: Alles auswählen

for result in results:
   geb_tag, geb_monat, geb_jahr, anrede, vorname, mail = result
   print "Datensatz:", result
   print "Vorname: ", vorname
wenn du result nicht brauchst, kannst du das auch direkt im for-kopf machen:

Code: Alles auswählen

for geb_tag, geb_monat, geb_jahr, anrede, vorname, mail in results:
  ...
result brauche ich nicht, es ist nur zum testen.
Ich möchte nicht die Parameter einzeln auflisten sondern direkt aus sql_fields holen.
In dieser Art:

Code: Alles auswählen

for sql_fields in result:
So wie ich es bei sql_query habe.

Code: Alles auswählen

sql_query = "select "+','.join(sql_fields)+" from biz_kunden where
Gruß
Ralf
BlackJack

Mittwoch 28. November 2007, 18:41

Das sähe dann ungefähr so aus:

Code: Alles auswählen

for field_name, value in zip(sql_fields, result):
    print '%s: %s' % (field_name, value)
Pixelpirat
User
Beiträge: 4
Registriert: Mittwoch 28. November 2007, 15:42

Donnerstag 29. November 2007, 10:34

Das kommt der Sache schon viel näher.

Aber irgendwie habe ich mich (aufgrund von Unwissenheit) etwas ungenau ausgedrückt. Ich will es mal anders versuchen:

In einem assoziativem php-Array kann ich auf den Inhalt via

Code: Alles auswählen

$blabla[blubblub] 
zugreifen.
Selbiges möchte ich auch mit python machen. Hier bin ich beim lesen verschiedener Tutorials auf die Lösung

Code: Alles auswählen

for result in result:
variable1, variable2 .... = result
print variable1 
gekommen. Nur hier (result) handelt es sich ja um eine Liste, deren Einträge einzeln zugeordnet werden (Ist das Ergebnis nicht ein Dict?)

Sorry für die umständliche Ausdrucksweise. Ich bin Newbie in Python und habe noch so meine Zuordnungsproblemchen in der Terminologie. :-)

Danke für Eure Bemühungen.
Gruß
Ralf
BlackJack

Donnerstag 29. November 2007, 12:56

Das Ergebnis ist in der Tat eine Liste. Mit ``dict(zip(sql_fields, result))`` bekommst Du ein entsprechendes Dictionary ("Hash" in PHP/Perl).
Pixelpirat
User
Beiträge: 4
Registriert: Mittwoch 28. November 2007, 15:42

Donnerstag 29. November 2007, 13:20

Hallo,
BlackJack hat geschrieben:Mit ``dict(zip(sql_fields, result))`` bekommst Du ein entsprechendes Dictionary ("Hash" in PHP/Perl).
Deine Lösung ist klar schöner als mein 3-Zeiler, den ich inzwischen hinbekommen habe.

Code: Alles auswählen

 customer = {}
    for field, value in zip(sql_fields, result):
        customer[field] = value
Danke Dir für die Hlfe!

Gruß
Ralf
Antworten