如何使用apsw创建多个具有预期out的复杂sqlite事务?

2024-04-18 23:15:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在一个事务中执行几个复杂的语句,并在最后使用select语句进行进一步处理。你知道吗

这样做一次就可以了,但是当我再次执行相同的语句时,它会导致下面的错误。你知道吗

测试代码:

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

Edit:它似乎连接到了“fetchone()”方法,如果我改用“fetchall()”它就可以工作了。在我的具体案例中,我确实期望得到一个结果,因此我编辑了代码以反映这一点。你知道吗


Tags: executefoo语句connectionselectcursortransactioncommit
1条回答
网友
1楼 · 发布于 2024-04-18 23:15:07

SQLite动态计算结果。当您调用fetchone()时,执行只在需要返回一行时运行。你知道吗

要确保执行所有语句,请调用fetchall(),或者迭代结果,即使您知道只有一个。你知道吗

最好不要将尽可能多的语句压缩到一个SQL字符串中。你知道吗

相关问题 更多 >