Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

💾 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 with bloğu kullanın)
  • Büyük veri setleri için sayfalama (pagination) kullanın
  • Düzenli olarak VACUUM komutuyla veritabanını optimize edin
  • Kritik işlemlerde transaction kullanın

🔗 İlgili Modüller

  • fs - Dosya sistemi işlemleri
  • csv - CSV veri aktarımı
  • json - JSON veri formatı
  • time - Zaman damgası işlemleri