我试图使用Python(传统的,2.7)和SQLite(3)来编写book indexer。
代码可以归结为以下SQL语句序列:
'select count(*) from tag_dict' ()
/* [(30,)] */
'select count(*) from file_meta' ()
/* [(63613,)] */
'begin transaction' ()
'select id from archive where name=?' ('158326-158457.zip',)
/* [(20,)] */
'select id from file where name=? and archive=?' ('158328.fb2', 20)
/* [(122707,)] */
'delete from file_meta where file=?' (122707,)
'commit transaction' ()
# error: cannot commit - no transaction is active
隔离级别是'DEFERRED'('EXCLUSIVE'没有更好的选择)。
我试图使用connection.commit()而不是cursor.execute('commit')-没有发生任何有用的事情。
如果我使用connection.commit()(注意:没有connection.begin方法!),那么我只是丢失了数据。
当然,我已经对数据库文件及其目录的文件权限进行了double/triple/d检查。
好吧,我经常在提出问题后一分钟就找到了解决办法。
作为一个新手,我有8个小时不能回答自己的问题。。。 所以,答案就在这里:
解决方案是found here,由唯一的想法组成:
这听起来很奇怪,但确实有效。
这是一个相当晚的响应,但是如果您希望对事务进行更精细的控制,可以查看APSW。我在pysqlite上运行了一些涉及读取的延迟事务测试,但它似乎没有正确执行。
好吧,我经常在提出问题后一分钟就找到了解决办法。
解决方案是found here,由唯一的想法组成:
不要在Python应用程序的非自动提交模式下使用BEGIN/COMMIT-仅使用db.COMMIT()和db.rollback()!
这听起来很奇怪,但确实有效。
相关问题 更多 >
编程相关推荐