[Python-de] Dictionary-Problem

Stefan Schwarzer s.schwarzer at ndh.net
Sun Sep 9 15:48:02 EDT 2001


Hallo Bernd,

"Dr. Bernd Freistedt" wrote:
> Typisches Sontagsproblem - cgi :-)

;-)

> aus Feldern, die von einem <form> uebermittelt werden und deren
> Namen mit "m_" beginnen, soll eine Query mit den Feldnamen ohne
> "m_" gebaut werden. Ich hab's mit einem Dictionary (entry)
> versucht:
> 
> flds = ['name','zusatz','vname','strasse','ort','plz',\

Die \ am Ende brauchst du nicht, da die Anweisung wegen der offenen
eckigen Klammer [ ohnehin fortgesetzt wird.

Ich würde auch ruhig "ausgeschriebene" Variablennamen empfehlen :) .

>         'land','tel_p','tel_d','fax','email','www',\
>         'bemerkung','kat','mae_name']
> entry = {}
> for lfd in flds:
>    mflds = "m_" + lfd
>       if form.has_key(mflds):
>          entry[lfd] = form[mflds].value
>       else:
>          entry[lfd] = ""
> query="INSERT INTO adressen VALUES (%s)" % entry.values()

Du kannst folgendes probieren (ungetesteter Code):

fields = ['name', 'zusatz', 'vname', 'strasse', 'ort', 'plz',
            'land', 'tel_p', 'tel_d', 'fax', 'email', 'www',
            'bemerkung', 'kat', 'mae_name']
fields_string = ','.join(fields)

values = []
for field in fields:  # war: flds
    needed_form_field = 'm_' + field
    if form.has_key(needed_form_field):
        values.append( form[needed_form_field].value )
    else:
        values.append('')

# Anfuehrungszeichen fuer Zeichenketten in SQL INSERT
# "'" ist " ' ", "''" ist " ' ' " ohne Leerzeichen
values = [ ("'%s'" % value.replace("'", "''") for value in values ]
values_string = ','.join(values)

# funktioniert auch noch, wenn die Tabelle neue Felder bekommt oder
#  deren Reihenfolge vertauscht wird
query = "INSERT INTO adressen (%s) VALUES (%s)" % \
           (fields_string, values_string)

> Leider ist die Query nicht zu verwenden:
> a) die entry.values sind nicht in der gleichen Reihenfolge wie
>    flds

Die "Reihenfolge" der Keys in einem Dictionary ist unbestimmt; wenn sie der
Reihenfolge der Einfügungen entspricht, ist das reiner Zufall. Immerhin
entsprechen sich aber die Folgen von dict.keys() und dict.values(), wenn das
Dictionary zwischendurch nicht geändert wurde.

Du kannst also auch ein Dictionary verwenden und die fields und values mit
fields = entry.keys()
values = entry.values()
erzeugen und danach wie oben quoten und mit Kommas zusammenfassen.

Viele Grüße
 Stefan



More information about the Python-de mailing list