python sqlite3事务_Python/SQLite3:无法提交-没有事务是acti

我试图使用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')-没有发生任何有用的事情。当然,我已经搜索过stackoverflow和Net,但是找到的答案是不相关的。

由于性能原因,自动提交模式不可接受。

我一次使用唯一的数据库文件。

我的代码是单线程运行的。

所有的SQL执行都是通过一个函数完成的,这个函数确保我一次只打开一个游标。

那么,这里的交易怎么了?

如果我使用connection.commit()(注意:没有connection.begin方法!),那么我只是丢失了数据。

当然,我已经对数据库文件及其目录的文件权限进行了double/triple/d检查。

好吧,我经常在提出问题后一分钟就找到了解决办法。

作为一个新手,我有8个小时不能回答自己的问题。。。

所以,答案就在这里:

解决方案是found here,由唯一的想法组成:

不要在Python应用程序的非自动提交模式下使用BEGIN/COMMIT-仅使用db.COMMIT()和db.rollback()!

这听起来很奇怪,但确实有效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值