husonet | Tarih: 24.04.2011
(pysqlite2) python sqllite kütüphanesi
python SQLite kütüphanesi örnekleri
Tips
from pysqlite2 import dbapi2 as sqlite
DATABASE = '/home/kullanici/databases/test.db'
try:
cnn = sqlite.connect(DATABASE, timeout=15)
crs = cnn.cursor()
# tablodan okuma
sql = 'SELECT * FROM tablo'
crs.execute(sql)
view = crs.fetchall()
for row in view:
alan0 = row[0]
alan1 = row[1]
print alan1, alan2
# tabloda degisiklik
sql = 'UPDATE tablo SET alan1 = deger'
crs.execute(sql)
cnn.commit()
crs.close()
cnn.close()
return True
except:
return False
Tips
. Değişikliklerin ne zaman işleneceği (Isolation Level)
cnn = sqlite.connect(DATABASE, isolation_level=ISOLATION_LEVEL)
veya
cnn.isolation_level = ISOLATION_LEVEL
ISOLATION_LEVEL şu değerleri alabilir:
None -> AutoCommit yapar
'DEFERRED' -> BEGIN ile kilitleme yapılmaz.
İlk okuma ile SHARED lock yapılır; başkaları okuma yapabilir ama yazma yapamaz
İlk yazma ile RESERVED lock yapılır; SHARED locklar bitince yazma işlemini yapar
'IMMEDIATE' -> Transaction başlar başlamaz, RESERVED lock yapılır
Transaction esnasında diğer processler okuma yapabilir ama yazma yapamaz
'EXCLUSIVE' -> BEGIN ile EXCLUSIVE lock yapılır
Transaction bitmeden başka processler okuma veya yazma yapamaz
. Değişiklikler geri alınacaksa
cnn.rollback()
. Hafızada geçici dosya oluşturulacaksa... Geçici dosyayi sadece mevcut connection görür.
cnn.connect(':memory:')
. Sorgular icin timeout suresi (saniye)
cnn.connect(DATABASE, timeout=15.0)
. Asenkron modda çalışmak için... Verilerin diske yazılması beklenmez. RAM'deki veritabani ile çalışırken uygun.
crs.execute('PRAGMA synchronous=OFF')
. White-Ahead Log (WAL) journaling modu için veritabanı oluşturulurken bir kere...
PRAGMA journal_mode = WAL;
. veritabaninde resim tutmak
sqlite3 resim.db "CREATE TABLE resim (id INTEGER PRIMARY KEY, res BLOB);"
sqlite3 resim.db "INSERT INTO resim (res) VALUES (\"$(base64 -w0 resim.jpg)\");"
sqlite3 resim.db "SELECT res FROM resim WHERE id=1;" | base64 -w0 -d > tmp.jpg