💾 sqlite - SQLite Veritabanı
Hafif, dosya tabanlı SQL veritabanı yönetimi
📦 62 Fonksiyon
📝 1296 Satır
💾 40.3 KB
📋 Genel Bakış
sqlite modülü, SQLite veritabanı motorunu kullanarak hafif, sunucusuz SQL veritabanı yönetimi sağlar. Dosya tabanlı veritabanları oluşturma, sorgulama ve yönetme işlemleri için kapsamlı araçlar sunar.
🔌 Bağlantı Yönetimi
- sqlite.bağlan() - Veritabanına bağlanma
- sqlite.bellek_vtı() - Bellek içi veritabanı
- sqlite.kapat() - Bağlantıyı kapatma
- sqlite.bağlantı_durumu() - Bağlantı kontrolü
📝 SQL Sorguları
- sqlite.sorgu() - SQL sorgusu çalıştırma
- sqlite.çalıştır() - SQL komutu çalıştırma
- sqlite.hazırlı_sorgu() - Prepared statement
- sqlite.toplu_çalıştır() - Toplu SQL çalıştırma
📊 Veri İşlemleri
- sqlite.ekle() - Veri ekleme (INSERT)
- sqlite.güncelle() - Veri güncelleme (UPDATE)
- sqlite.sil() - Veri silme (DELETE)
- sqlite.bul() - Veri sorgulama (SELECT)
- sqlite.tümünü_bul() - Tüm kayıtları getirme
🔄 İşlem (Transaction) Yönetimi
- sqlite.işlem_başlat() - Transaction başlatma
- sqlite.kaydet() - Transaction commit
- sqlite.geri_al() - Transaction rollback
- sqlite.kayıt_noktası() - Savepoint oluşturma
🏗️ Şema Yönetimi
- sqlite.tablo_oluştur() - Tablo oluşturma
- sqlite.tablo_sil() - Tablo silme
- sqlite.sütun_ekle() - Sütun ekleme
- sqlite.indeks_oluştur() - İndeks oluşturma
💡 Kullanım Örnekleri
Temel Veritabanı İşlemleri
kullan sqlite
// Veritabanına bağlan (dosya yoksa oluşturulur)
değer vt = sqlite.bağlan("kullanıcılar.db")
// Tablo oluştur
vt.çalıştır("""
CREATE TABLE IF NOT EXISTS kullanıcılar (
id INTEGER PRIMARY KEY AUTOINCREMENT,
ad TEXT NOT NULL,
email TEXT UNIQUE NOT NULL,
yaş INTEGER,
kayıt_tarihi TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
""")
yazdır("✓ Tablo oluşturuldu")
// Veri ekleme
vt.çalıştır(
"INSERT INTO kullanıcılar (ad, email, yaş) VALUES (?, ?, ?)",
["Ahmet Yılmaz", "ahmet@example.com", 28]
)
vt.çalıştır(
"INSERT INTO kullanıcılar (ad, email, yaş) VALUES (?, ?, ?)",
["Ayşe Demir", "ayse@example.com", 32]
)
vt.çalıştır(
"INSERT INTO kullanıcılar (ad, email, yaş) VALUES (?, ?, ?)",
["Mehmet Kaya", "mehmet@example.com", 25]
)
yazdır("✓ Kullanıcılar eklendi")
// Tüm kullanıcıları sorgula
değer kullanıcılar = vt.sorgu("SELECT * FROM kullanıcılar")
yazdır("\n--- Tüm Kullanıcılar ---")
için kullanıcı içinde kullanıcılar {
yazdır(f"ID: {kullanıcı['id']}, Ad: {kullanıcı['ad']}, " +
f"Email: {kullanıcı['email']}, Yaş: {kullanıcı['yaş']}")
}
// Filtreleme
değer genç_kullanıcılar = vt.sorgu(
"SELECT * FROM kullanıcılar WHERE yaş < ?",
[30]
)
yazdır(f"\n30 yaşından küçük {genç_kullanıcılar.uzunluk} kullanıcı bulundu")
// Bağlantıyı kapat
vt.kapat()
yazdır("\n✓ Veritabanı bağlantısı kapatıldı")
İşlem (Transaction) Yönetimi
kullan sqlite
değer vt = sqlite.bağlan("banka.db")
// Hesaplar tablosu oluştur
vt.çalıştır("""
CREATE TABLE IF NOT EXISTS hesaplar (
hesap_no TEXT PRIMARY KEY,
sahip TEXT NOT NULL,
bakiye REAL NOT NULL DEFAULT 0
)
""")
// İlk verileri ekle
vt.çalıştır(
"INSERT OR REPLACE INTO hesaplar VALUES (?, ?, ?)",
["TR001", "Ahmet", 1000.0]
)
vt.çalıştır(
"INSERT OR REPLACE INTO hesaplar VALUES (?, ?, ?)",
["TR002", "Ayşe", 500.0]
)
yazdır("İlk bakiyeler:")
için hesap içinde vt.sorgu("SELECT * FROM hesaplar") {
yazdır(f" {hesap['hesap_no']}: {hesap['bakiye']} TL")
}
// Para transferi (transaction ile güvenli)
fonksiyon para_transfer(vt: sqlite.Bağlantı, kaynak: Dize, hedef: Dize, miktar: Gerçek) -> Sonuç<Boş, Hata> {
dene {
// Transaction başlat
vt.işlem_başlat()
// Kaynak hesabı kontrol et
değer kaynak_bakiye = vt.sorgu(
"SELECT bakiye FROM hesaplar WHERE hesap_no = ?",
[kaynak]
)[0]["bakiye"]
eğer kaynak_bakiye < miktar {
vt.geri_al()
dön Hata("Yetersiz bakiye!")
}
// Kaynaktan çek
vt.çalıştır(
"UPDATE hesaplar SET bakiye = bakiye - ? WHERE hesap_no = ?",
[miktar, kaynak]
)
// Hedefe ekle
vt.çalıştır(
"UPDATE hesaplar SET bakiye = bakiye + ? WHERE hesap_no = ?",
[miktar, hedef]
)
// Transaction'ı kaydet
vt.kaydet()
yazdır(f"✓ Transfer başarılı: {miktar} TL ({kaynak} -> {hedef})")
dön Tamam(boş)
} yakala hata {
vt.geri_al()
dön Hata(f"Transfer başarısız: {hata}")
}
}
// Transfer yap
para_transfer(vt, "TR001", "TR002", 300.0).aç()
yazdır("\nSon bakiyeler:")
için hesap içinde vt.sorgu("SELECT * FROM hesaplar") {
yazdır(f" {hesap['hesap_no']}: {hesap['bakiye']} TL")
}
vt.kapat()
E-Ticaret Ürün Yönetimi
kullan sqlite
kullan time
sınıf ÜrünYöneticisi {
değer vt: sqlite.Bağlantı
fonksiyon yeni(vt_dosyası: Dize) -> ÜrünYöneticisi {
değer vt = sqlite.bağlan(vt_dosyası)
// Tabloları oluştur
vt.çalıştır("""
CREATE TABLE IF NOT EXISTS kategoriler (
id INTEGER PRIMARY KEY AUTOINCREMENT,
ad TEXT UNIQUE NOT NULL
)
""")
vt.çalıştır("""
CREATE TABLE IF NOT EXISTS ürünler (
id INTEGER PRIMARY KEY AUTOINCREMENT,
ad TEXT NOT NULL,
açıklama TEXT,
fiyat REAL NOT NULL,
stok INTEGER NOT NULL DEFAULT 0,
kategori_id INTEGER,
oluşturma_tarihi TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (kategori_id) REFERENCES kategoriler(id)
)
""")
// İndeksler
vt.çalıştır("CREATE INDEX IF NOT EXISTS idx_fiyat ON ürünler(fiyat)")
vt.çalıştır("CREATE INDEX IF NOT EXISTS idx_kategori ON ürünler(kategori_id)")
dön ÜrünYöneticisi { vt: vt }
}
fonksiyon kategori_ekle(ad: Dize) -> Tam {
bu.vt.çalıştır(
"INSERT OR IGNORE INTO kategoriler (ad) VALUES (?)",
[ad]
)
değer sonuç = bu.vt.sorgu(
"SELECT id FROM kategoriler WHERE ad = ?",
[ad]
)
dön sonuç[0]["id"]
}
fonksiyon ürün_ekle(ad: Dize, açıklama: Dize, fiyat: Gerçek, stok: Tam, kategori_ad: Dize) {
değer kategori_id = bu.kategori_ekle(kategori_ad)
bu.vt.çalıştır(
"INSERT INTO ürünler (ad, açıklama, fiyat, stok, kategori_id) VALUES (?, ?, ?, ?, ?)",
[ad, açıklama, fiyat, stok, kategori_id]
)
yazdır(f"✓ Ürün eklendi: {ad}")
}
fonksiyon ürün_ara(arama_terimi: Dize) -> Liste {
dön bu.vt.sorgu(
"SELECT ü.*, k.ad as kategori FROM ürünler ü " +
"JOIN kategoriler k ON ü.kategori_id = k.id " +
"WHERE ü.ad LIKE ? OR ü.açıklama LIKE ?",
[f"%{arama_terimi}%", f"%{arama_terimi}%"]
)
}
fonksiyon fiyat_aralığında_ürünler(min_fiyat: Gerçek, max_fiyat: Gerçek) -> Liste {
dön bu.vt.sorgu(
"SELECT * FROM ürünler WHERE fiyat BETWEEN ? AND ? ORDER BY fiyat",
[min_fiyat, max_fiyat]
)
}
fonksiyon stok_güncelle(ürün_id: Tam, yeni_stok: Tam) {
bu.vt.çalıştır(
"UPDATE ürünler SET stok = ? WHERE id = ?",
[yeni_stok, ürün_id]
)
}
fonksiyon düşük_stok_raporu(eşik: Tam = 10) -> Liste {
dön bu.vt.sorgu(
"SELECT * FROM ürünler WHERE stok < ? ORDER BY stok",
[eşik]
)
}
fonksiyon kapat() {
bu.vt.kapat()
}
}
// Kullanım
değer yönetici = ÜrünYöneticisi.yeni("eticaret.db")
// Ürünler ekle
yönetici.ürün_ekle("Laptop", "15.6 inç, 16GB RAM, 512GB SSD", 8500.0, 15, "Elektronik")
yönetici.ürün_ekle("Klavye", "Mekanik RGB Klavye", 450.0, 45, "Elektronik")
yönetici.ürün_ekle("Mouse", "Kablosuz Optik Mouse", 120.0, 80, "Elektronik")
yönetici.ürün_ekle("Kitap", "Python Programlama", 75.0, 5, "Kitap")
yönetici.ürün_ekle("Kulaklık", "Bluetooth Kulaklık", 350.0, 8, "Elektronik")
// Arama
yazdır("\n--- 'Klavye' Araması ---")
için ürün içinde yönetici.ürün_ara("Klavye") {
yazdır(f"{ürün['ad']}: {ürün['fiyat']} TL (Stok: {ürün['stok']})")
}
// Fiyat aralığı
yazdır("\n--- 100-500 TL Arası Ürünler ---")
için ürün içinde yönetici.fiyat_aralığında_ürünler(100.0, 500.0) {
yazdır(f"{ürün['ad']}: {ürün['fiyat']} TL")
}
// Düşük stok uyarısı
yazdır("\n--- Düşük Stok Uyarısı (< 10) ---")
için ürün içinde yönetici.düşük_stok_raporu(10) {
yazdır(f"⚠️ {ürün['ad']}: {ürün['stok']} adet kaldı!")
}
yönetici.kapat()
🎯 İyi Uygulamalar
- Prepared statements kullanarak SQL injection'ı önleyin
- Transaction'larla veri tutarlılığını sağlayın
- Sık kullanılan sorgular için indeks oluşturun
- Bağlantıları her zaman kapatın (veya
withbloğu kullanın) - Büyük veri setleri için sayfalama (pagination) kullanın
- Düzenli olarak
VACUUMkomutuyla veritabanını optimize edin - Kritik işlemlerde transaction kullanın