Thursday, 15 April 2010

python sqlite "BEGIN TRANSACTION" and "COMMIT" commands -



python sqlite "BEGIN TRANSACTION" and "COMMIT" commands -

if want start transaction in database through python have execute sql command 'begin transaction' explicitly this:

import sqlite3 conn = sqlite3.connect(db) c = conn.cursor() c.execute('begin transaction;') ##... updates on database ... conn.commit() ## or c.execute('commit'). these 2 expressions same?

is database locked alter other clients when found connection or when begin transaction or neither?

only transactions lock database.

however, python tries clever , automatically begins transactions:

by default, sqlite3 module opens transactions implicitly before info modification language (dml) statement (i.e. insert/update/delete/replace), , commits transactions implicitly before non-dml, non-query statement (i. e. other select or aforementioned).

so if within transaction , issue command create table ..., vacuum, pragma, sqlite3 module commit implicitly before executing command. there 2 reasons doing that. first of these commands don’t work within transactions. other reason sqlite3 needs maintain track of transaction state (if transaction active or not).

you can command kind of begin statements sqlite3 implicitly executes (or none @ all) via isolation_level parameter connect() call, or via isolation_level property of connections.

if want autocommit mode, set isolation_level none.

otherwise leave @ default, result in plain “begin” statement, or set 1 of sqlite’s supported isolation levels: “deferred”, “immediate” or “exclusive”.

python sqlite transactions

No comments:

Post a Comment