ich habe mir PEP 249 und die sqlite3 Doku zum Thema "Rollbacks" durchgelesen, aber scheinbar nicht richtig verstanden:
Angenommen, man hat folgenden Python Code:
Code: Alles auswählen
import sqlite3
con = sqlite3.connect('db.sqlite3')
cur = con.cursor()
cur.execute("""CREATE TABLE demo_table (
id INT(3) NOT NULL,
name VARCHAR(30) NOT NULL
);""")
con.rollback()
con.close()
PEP 249:
Demnach sollte das explizite 'con.rollback()' sogar weggelassen werden können um dasselbe Ergebnis zu erhalten, da 'con.close()' ohne voriges .commit das impliziert.In case a database does provide transactions this method causes the database to roll back to the start of any pending transaction. Closing a connection without committing the changes first will cause an implicit rollback to be performed.
Zudem wird in der sqlite3 Doku dieses Modul als "Rollback capable" beschrieben; es kommt ja auch nicht, wie in der PEP 249 beschrieben zu einer Exception oder einem AttributeError, was dieses ebenfalls unterstreicht.
Dennoch existiert anschließend diese Struktur in der Datei, wie folgende Ausgabe des sqlite3 Tools zeigt:
Code: Alles auswählen
$ sqlite3
SQLite version 3.11.0 2016-02-15 17:29:24
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .open db.sqlite3
sqlite> .schema demo_table
CREATE TABLE demo_table (
id INT(3) NOT NULL,
name VARCHAR(30) NOT NULL
);
sqlite>