I'm trying to code a book indexer using Python (traditional, 2.7) and SQLite (3).
The code boils down to this sequence of SQL statements:
'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
The isolation level is 'DEFERRED' ('EXCLUSIVE' is no better).
I've attempted to use connection.commit() instead of cursor.execute('commit') - nothing useful happened.
If I use connection.commit() (note: there is no connection.begin method!), then I merely lose my data.
Sure, I've double/triple/d checked file permissions on the database file and its directory.
Well, as it often happens I found the solution just a minutes after posing the question.
The solution was found here and consists of the only idea:
It sounds odd, but it works.
This is a pretty late response, but perhaps take a look at APSW if you want finer-grain control over transactions. I ran a few tests on deferred transactions involving reads on pysqlite, and it just doesn't seem to perform correctly.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With