import sqlite3
database=sqlite3.connect("test.sqlite3")
database.execute("create table sample (id numeric)")
database.commit()
time.sleep(5.0)
# ここで暗黙の begin transaction
database.execute("insert into sample values (?)",(100,)) # insert
time.sleep(5.0)
# ここで暗黙の commit
database.execute("vacuum") # vacuum
time.sleep(5.0)
print(database.execute("select count(*) from sample").fetchone()[0]) # select
import sqlite3
database=sqlite3.connect("test.sqlite3",isolation_level=None) # オートコミットを有効に指定
database.execute("create table sample (id numeric)")
database.commit()
time.sleep(5.0)
# ここで暗黙の begin transaction
database.execute("insert into sample values (?)",(100,)) # insert
# ここで暗黙の commit
time.sleep(5.0)
database.execute("vacuum") # vacuum
time.sleep(5.0)
print(database.execute("select count(*) from sample").fetchone()[0]) # select
| 分離レベル | デフォルトに設定されているバージョン | 概要 |
|---|---|---|
| DEFERRED | 3.0.8〜 | トランザクションの開始ではなく、始めの SQL 文実行時にロックをかける |
| IMMEDIATE | 3.0.0〜3.0.7 | トランザクション開始時にロックをかける |
| EXCLUSIVE | 〜2.8 | トランザクション開始時に排他ロックをかける |
import sqlite3
# 変数 level に "EXCLUSIVE", "IMMEDIATE", "DEFERRED" のいずれかを設定しておく
database=sqlite3.connect("test.sqlite3",isolation_level=level) # 分離レベルを level に設定
database.execute("create table sample (id numeric)")
database.commit()
time.sleep(5.0)
database.execute("begin transaction") # begin transaction (A)
time.sleep(5.0)
database.execute("insert into sample values (?)",(100,)) # insert (B)
time.sleep(5.0)
database.commit() # commit (C)
time.sleep(5.0)
if level=="EXCLUSIVE":
print(u"(A)〜(C) の間は他のプロセスは読み書き不可")
elif level=="IMMEDIATE":
print(u"(A)〜(C) の間は他のプロセスは書き込み不可")
elif level=="DEFERRED":
print(u"(B)〜(C) の間は他のプロセスは書き込み不可")
print(u"(C) の実行開始〜終了の間は他のプロセスは読み書き不可")
戻る