我试图使用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()!

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

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

  1. Oracle数据库事务回滚和提交,数据库 事务提交和回滚

    事务  -  (transaction / tx) 原子性操作性(不可以分割的操作) - 要么全做, 要么全不做 事务的特点  -  ACID 特性 A - atomicity  原子性 : 不可分割 ...

  2. mysql使用jdbc进行批量插入时把事务设为手动提交比事务自动提交速度快了10倍

    第一次写博客,写的不好请多多包涵.欢迎评论 今天需要对mysql做一个批量插入的操作,使用的是原生的jdbc对mysql进行操作,大约插入20几万条数据,刚开始事务是自动提交的,插完数据大约用了4分钟 ...

  3. pythonsqlite事务_python sqlite3 的事务控制

    Python sqlite3 的事务控制 官方文档的描述: Controlling Transactions By default, the sqlite3 module opens transact ...

  4. python mysql操作_Python的MySQL操作

    Python的DB-API,为大多数的数据库实现了接口,使用它连接各数据库后,就可以用相同的方式操作各数据库. Python DB-API使用流程: 引入API模块. 获取与数据库的连接. 执行SQL ...

  5. python sqlite3事务_python使用上下文管理器实现sqlite3事务机制

    如题,本文记录如何使用python上下文管理器的方式管理sqlite3的句柄创建和释放以及事务机制. 1.python上下文管理(with) python上下文管理(context),解决的是这样一类 ...

  6. python开发sqlite3完整_python开发_sqlite3_绝对完整

    #python sqlite #Author : Hongten #MailTo : [email protected] #QQ     : 648719819 #Blog   : http://ww ...

  7. 浅谈Python自带数据库SQLite3模块的使用(全面详细)

    目录 写在前面 一:使用数据库的宏观过程 二:数据库使用 1.导入数据库模块 2.打开数据库 2.1.在硬盘上建立数据库 2.2.在内存上建立数据库 3.创建游标 4.执行SQL语句 4.1.创建表 ...

  8. python redis事务_python redis事务源码及应用分析

    在多个客户端同时处理相同的数据时,不谨慎的操作很容易导致数据出错.一般的关系型数据库中有事务保证了数据操作的原子性,同样Redis中也设置了事务,可以理解为"将多个命令打包,然后一次性.按顺 ...

  9. python上的数据库sqlite3——插入多行数据

    学校课程上的一个知识点,一个简单的课后习题:一劳永逸实现多行数据的插入(应该是这个意思,老师也没讲清楚).直接上代码了没啥好讲的,我感觉这个思路好捞. 1 import sqlite3 2 con = ...

最新文章

  1. 对象特性--构造函数调用规则
  2. 两种ICP的改进算法:PLICP与NICP
  3. 取消学术型硕士,增扩博士,北京大学这个学院做出研究生培养结构调整
  4. python基础教程第三版豆瓣-Python爬虫入门教程:豆瓣读书练手爬虫
  5. 2020年,产品经理如何提高求职成功率?
  6. vl02n 批次拆分
  7. nyoj 12(区间覆盖)
  8. Python Day11
  9. TCP/IP学习笔记(九)TCP报文段首部格式
  10. mysql数据表交叉引用_数据定义语句
  11. 计算机键盘标注,你所不知道的 Windows 10 小诀窍:万能计算器、虚拟键盘、屏幕截图标注...
  12. appweb ejs_具有快速路线的EJS
  13. 操作系统已经向SQL Server 返回了错误21
  14. Zookeeper学习笔记01
  15. listview 加载的时候报java.lang.IllegalArgumentException: column ‘_id’ does not exist 错误
  16. 【TensorFlow系列】【九】利用tf.py_func自定义算子
  17. java 生成拼音_java 根据汉字生成拼音全拼或拼音首字母
  18. 编译原理实验:miniC语言编译器
  19. dell笔记本安装win7.ios
  20. Chrome快捷键大全:Chrome窗口和标签页快捷键、功能快捷键、网页快捷键

热门文章

  1. MAC上测试常用工具整理
  2. 闰年 判断的两种方式
  3. 基于 Petri 网的软件过程支撑环境设计
  4. 手机界面设计—常识篇
  5. OpenCV-Python击中击不中HITMISS形态变换详解
  6. 天津海洋功能区划获批复 排海污水须100%达标-天津海洋功能区划-污水-达标率
  7. Comet OJ - Contest #5 迫真小游戏
  8. 不换行输出的两种方式
  9. 【ANSYS】Notepad++:一款好用的APDL语法编辑器
  10. 百度地图之标注物聚合