我正在尝试使用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方法!),那么我只是丢失了我的数据。
当然,我已经对数据库文件及其目录中的doube / triple / quaruple检查了文件权限。
嗯,正如经常发生的那样,我在提出问题后几分钟就找到了解决方案。
作为一个新手,我无法回答8个小时的问题...... 所以,anwer现在在那里:
解决方案是found here,其中包含唯一的想法:
这听起来很奇怪,但确实有效。
答案 0 :(得分:12)
嗯,正如经常发生的那样,我在提出问题后几分钟就找到了解决方案。
解决方案是found here,其中包含唯一的想法:
这听起来很奇怪,但确实有效。
答案 1 :(得分:3)
这是一个非常晚的回复,但如果你想要更精细的控制交易,也许可以看一下APSW。我对涉及pysqlite读取的延迟事务运行了一些测试,但它似乎没有正确执行。
答案 2 :(得分:0)
cursor=connection.cursor()
cursor.executemany("insert into person(firstname, lastname) values (?, ?)", persons)
connection.commit()