Python + SqLite: Probleme beim Insert/Update

#2687425
Lesenswert?

Servus allerseits

Seit einiger Zeit versuche ich mich in Python einzuarbeiten. Beim 
Zugriff auf die DB habe ich Probleme.
Ich schaffe es zwar ein Insert/Update auszuführen. Aber über den 
Lösungsweg muss ich selbst den Kopf schütteln.

Ich lese eine Zeile ein, wandle die sqlite3.row in eine Dictionary um 
und übergebe das Ganze an eine Form-Klasse.
Dort werden die Werte editiert und als Dictionary wieder zurückgegeben.
Soweit keine Probleme. Probleme habe ich beim zurückschreiben auf die 
Datenbank.

Anfaenglich hatte ich Platzhalter eingesetzt, hatte aber komische 
Ergebnisse in der Datenbank. Bis ich bemerkte, dass bei der Umwandlung 
in eine Dictionary die Reihenfolge willkürlich erfolgt und nichts mit 
der Reihenfolge der Table zu tun hat. Also mache ich es z.Zt. so:
1
cSQL = "Insert into user (valid, name, passwd) Values ("
2
cSQL = cSQL + str(d['valid']) +","
3
cSQL = cSQL + "'" + d['name'] +"',"
4
cSQL = cSQL + "'" + d['passwd'] +"'))"
5
curs.execute(cSQL)
Ich habe versucht, die Dictionary in Values und Keys aufzulösen und dann 
mit join eine Liste zu erstellen:  aber weil auch numerische Werte in 
der Dictionary vorhanden sind, gab's Fehler.

Ich hoffe, dass mir jemand einen besseren Lösungsweg zeigen kann.

MfG
#2687789
Lesenswert?

Hab's jetzt rausgefunden (*)

Gegeben ist ein dictionary d
1
d = { 'id_nr':1111,
2
      'name': 'WerAuchImmer',
3
      'passwd': 'sagIchNicht'
4
    }
Weil's ein Insert ist, muss man die unique id-nr entfernen:
1
del d['id_nr']
1
cSQL = "insert into user ("+",".join(d.keys())+") values ("+":"+",:".join(d.keys())+")"
2
curs.execute(cSQL, d)

In cSQL steht:
1
insert into user (name,passwd) values (:name,:passwd)

Schon 'ne geile Sprache.

(*) 
http://www.python-forum.de/viewtopic.php?f=1&t=27642&hilit=sqlite+insert+dictionary

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren