sqlite, Basit, Hızlı Diske Değer Yazma Okuma
Bir Python uygulaması için basit, hızlı bir şekilde diske yazılabilen, ve istendiği zaman anahtar bazlı, tüm dosyayı hafızaya getirmeden hızlı şekilde okunabilen bir yapıya ihtiyaç vardı. Çözüm için önce Python'un sözlük (dictionary) yapısının diske yazılmasına izin veren çözümler akla geliyor, ki muhakkak o çerçevede pek çok çözüm var. Fakat bir çözüm var ki Python kurulumunun zaten içinde, tek bir dosyaya yönlendirilebilen depolaması mevcut, ve her yazımın diske gitmesini, ve hızlı okunabilmesini sağlıyor.
Bu yazılım sqlite3'ten başkası değil. Eğer az SQL yazmayı göze alırsak, ki bu dili tüm bilişimciler bilir, sqlite3 üstteki tüm ihtiyaçlara cevap verir.
Kurmak
pip install pysqlite3
Test edelim,
import sqlite3
db = sqlite3.connect('/tmp/mydb.db')
import random
cursor = db.cursor()
cursor.execute('''CREATE TABLE users(id INTEGER PRIMARY KEY, name TEXT,
phone TEXT, email TEXT, password TEXT)
''')
db.commit()
cursor = db.cursor()
name1 = 'Andres'
phone1 = '3366858'
email1 = 'user@example.com' + str(random.random())
password1 = '12345'
print (email1)
cursor.execute('''INSERT INTO users(name, phone, email, password)
VALUES(?,?,?,?)''', (name1,phone1, email1, password1))
db.commit()
Taban tek bir dosya, hangisi olacağını biz tanımladık, gayet basit. Üstteki insert komutunu ardı ardına işletelim ve arada sırada /tmp/mydb.db dosyasına bakalım. Bu dosya içinde yaratılan farklı isimleri göreceğiz. Dosya büyüklüğünü kontrol etmek ise yaramayabilir çünkü sqlite taban dosyasını her yazimda degil, belli aralıklarla büyütüyor.
Arada satır sayısını alttaki ile kontrol edebiliriz,
cursor = db.cursor()
cursor.execute('''SELECT count(*) FROM users''')
print (cursor.fetchone())
Taban iş bitince db.close
ile kapatılır. Fakat düzgün kapatılmasa
bile commit ile yazılanlar kaybolmayacaktır, yani süreç çökse, tekrar
tabana dönsek en son yazdığımız satırı orada bulacağız.
Bu tüm ihtiyaçları karşılıyor, farklı bir süreçte işleyen büyük bir taban değil, kurulmasına bile gerek yok zaten Python sürümünde var, ayrıca diske yazım var, hızlı okuma (herşeyi hafızaya getirmeden) destekleniyor.
Vurgulamak gerekirse tanimlanan veri taban ismindeki bir dosya yok ise, ilk kullanimda otomatik olarak yaratiliyor. Bu isleri cok rahatlatiyor.
Diğer bazı komutlar, bir ek veri sonrası,
import sqlite3
conn = sqlite3.connect('/tmp/mydb.db')
c = conn.cursor()
name2 = 'XXX'
phone2 = 'YYYYY'
email2 = 'xxxx@example.com' + str(random.random())
password1 = '12345'
c.execute('''INSERT INTO users(name, phone, email, password) VALUES(?,?,?,?)''', (name2,phone2,email2,'xxxx'))
conn.commit()
Alınan verileri döngü içinde gezmek,
c = conn.cursor()
rows = c.execute('''SELECT * FROM users''')
for row in rows:
print (row)
(1, 'Andres', '3366858', 'user@example.com0.5546258413014995', '12345')
(2, 'XXX', 'YYYYY', 'xxxx@example.com0.09226623997325056', 'xxxx')
Tabandaki tüm tabloları görmek için
c = conn.cursor()
rows = c.execute('''SELECT * FROM sqlite_master WHERE type='table' ''')
for row in rows: print (row)
Chinook Tabani
Orta ölçekte bir veri tabanı örneği olarak Chinook tabanı var. ChinookSqlite.zip dosyasını açın, ve loadchinook.py dosyasını işletince bu yüklemeyi yapılacaktır.
GUI
sudo apt-get install sqlitebrowse
sqlitebrowse
ile işletirsek, şu şekilde bir görsel program başlayacak.
Yukarı