[Python-de] SQLite Tutorial

Gerhard Häring gh at ghaering.de
Don Aug 5 23:11:59 CEST 2004


Sebastian "Marduk" Pölsterl wrote:
> Da SQLite ja eine rechte ellegante und schlanke DB ist, dachte ich mir,
> das schaust du dir mal an. Ich hab mir PySQLite geholt und gleich paar
> Versuche gestartet, aber das will noch nicht so recht, z.B. kann ich
> zwar eine Tabelle anlegen und Daten einfügen, aber wenn ich dann ein
> anderes Script ausführe, das die Daten auslesen soll, kommen Fehler. Und
> die Datei der DB hat außerdem keinen Inhalt. Leg ich die Tabelle etc.
> mit PHP an, kann PHP und Python die Daten auslesen. [...]

Der Code von Gerold Penz ist meiner Meinung nach "ein wenig" 
überkandidelt für ein so simples Problem :-P

Du hast ganz simpel vergessen, .commit() auf das Connection-Objekt 
auszuführen. Standardmäßig arbeitet PySQLite mit Transaktionen (*). Eine 
Transaktion ist dazu gut, zusammengehörige Änderungen an der Datenbank 
/atomar/ ablaufen zu lassen. D. h. sie werden entweder *alle* 
ausgeführt, oder *gar keine* davon.

Wenn du .commit() auf das Connection-Objekt ausführst, wird eine 
Transaktion abgeschlossen und die Änderungen werden auf der Datenbank aktiv.

Wenn du .rollback() auf das Connection-Objekt ausführst, werden alle 
Änderungen seit dem Start der Transaktion verworfen.

Die Transaktionen werden automatisch begonnen. Bei DB-API Modulen 
brauchst du dir um das BEGIN-Kommando in SQL also keine Gedanken zu 
machen. COMMIT in SQL entspricht .commit() und ROLLBACK in SQL 
entspricht .rollback().

-- Gerhard

(*) Und das ist auch gut so :-)