我想在一個事務中執行多個複雜語句,最後使用select語句進行進一步處理。如何使用apsw創建多個複雜的sqlite事務?
這樣做一旦正常工作,但只要我再次執行相同的語句,它會導致下面的錯誤。
測試代碼:
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())
輸出:
$ 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
編輯:這似乎是連接到 「fetchone()」 方法,如果我改用 「使用fetchall()」,它的工作原理。在我的具體情況中,我希望得到一個結果,所以我編輯了代碼來反映這一點。
的可能的複製[蟒蛇sqlite的「BEGIN TRANSACTION」和「提交」命令(http://stackoverflow.com/questions/26770719/python-sqlite-begin-transaction-and-commit-commands) – AndrewK