Ich möchte mehrere komplexe Anweisungen in einer Transaktion mit einer Select-Anweisung am Ende ausführen, die ich für die weitere Verarbeitung verwenden.Wie erstellt man mehrere komplexe sqlite-Transaktionen mit einer erwarteten Verwendung von apsw?
Dies funktioniert einmal gut, aber sobald ich dieselbe Anweisung erneut ausführen, verursacht es den Fehler unten.
Prüfregeln:
import apsw
connection = apsw.Connection("temp.db")
cursor = connection.cursor()
cursor.execute("""
BEGIN TRANSACTION;
CREATE TABLE Foo(x);
COMMIT;
""")
cursor = connection.cursor()
print(cursor.execute("""
BEGIN TRANSACTION;
INSERT INTO Foo (x) VALUES (1);
INSERT INTO Foo (x) VALUES (2);
SELECT x FROM Foo LIMIT 1;
COMMIT;
""").fetchone())
cursor = connection.cursor()
print(cursor.execute("""
BEGIN TRANSACTION;
INSERT INTO Foo (x) VALUES (3);
INSERT INTO Foo (x) VALUES (4);
SELECT x FROM Foo LIMIT 1;
COMMIT;
""").fetchone())
Ausgang:
$ python test.py
(1,)
Traceback (most recent call last):
File "test.py", line 28, in <module>
""").fetchone())
File "src/cursor.c", line 236, in resetcursor
apsw.SQLError: SQLError: cannot start a transaction within a transaction
Edit: Es scheint der "fetchone()" Methode angeschlossen werden, wenn ich statt "fetchall()" verwenden, es funktioniert . In meinem speziellen Fall erwarte ich von einem Ergebnis, also habe ich den Code entsprechend bearbeitet.
Mögliche Duplikate von [Python sqlite "BEGIN TRANSACTION" und "COMMIT" -Befehle] (http://Stackoverflow.com/questions/26770719/python-sqlite-begin-transaction-and-commit-commands) – AndrewK