不管python和sqlite如何,我都会遇到这个错误。在
File "addbooks.py", line 77, in saveBook
conn.commit()
sqlite3.OperationalError: cannot commit transaction - SQL statements in progress
代码如下:
^{pr2}$无法执行fetchall(),因为表和列的大小很大,而且内存不足。在
如果不使用肮脏的技巧(比如在内存中获取rowid,这很可能适合,然后逐个选择行)可以做什么呢?。在
问题是您将连接置于自动提交模式。将一个事务包装在整个事务中,这样只有在完成所有更新之后才会进行提交,而且它应该都可以正常工作。在
问题是,对于一个连接,活动游标不应该超过一个。在
解决方案是使用新的连接进行更新。在
不幸的是,我不记得我在文件中读到它的确切位置,所以我无法证明它。在
升级版:
以下代码适用于我的Windows XP:
并按预期返回以下内容:
^{pr2}$如果我将
conn2.commit()
移到for循环中,就会得到与您提到的相同的错误:因此,解决方案是在末尾提交一次,而不是在每行之后提交。在
不知道这是否也算作“肮脏的把戏”;—)
我对这个问题的解决方案是使用SELECT... LIMIT clause,假设您有主键整型字段
id
相关问题 更多 >
编程相关推荐