JupySQL ve SQLite ile Veritabanı İşlemleri
Bu notebook, Google Colab ortamında JupySQL eklentisi ve SQLite kullanarak temel SQL işlemlerini göstermektedir.
1.1 JupySQL Kütüphanesinin Kurulumu
1
| %pip install -q jupysql
|
Açıklama: SQL sorgularını Jupyter/Colab hücrelerinde doğrudan çalıştırmamızı sağlayan jupysql paketini sessiz modda (-q) kurar.
1.2 SQL Eklentisinin Aktifleştirilmesi
Açıklama: Jupyter’e SQL magic komutlarını tanıtan eklentiyi yükler. %sql ve %%sql magic komutlarını kullanabilmemizi sağlar.
1.3 Otomatik Commit Ayarı
1
| %config SqlMagic.autocommit = True
|
Açıklama: Her SQL işleminden sonra otomatik olarak COMMIT yapılmasını sağlar. Veri değişikliklerinin kalıcı olmasını garantiler.
1.4 Veritabanı Bağlantısı
1
| %sql sqlite:///ogrenci.db --alias ogrenci
|
Açıklama:
sqlite:///ogrenci.db: Yerel dosya sisteminde ogrenci.db adlı SQLite veritabanına bağlanır--alias ogrenci: Bu bağlantıya “ogrenci” takma adı verilir, böylece birden fazla bağlantı yönetilebilir
NOT: Birden fazla bağlantı örneği:
1
2
3
4
| %sql sqlite:///one.db --alias one
%sql sqlite:///two.db --alias two
%sql one # one bağlantısına geç
%sql two # two bağlantısına geç
|
2.1 Tablo Oluşturma (CREATE)
1
2
3
4
5
6
7
| %%sql
CREATE TABLE ogrenciler(
id INTEGER PRIMARY KEY, -- Otomatik artan benzersiz kimlik
isim TEXT NOT NULL, -- Boş bırakılamayan metin alanı
yas INTEGER, -- Tam sayı yaş bilgisi
sehir TEXT -- Şehir bilgisi (opsiyonel)
)
|
Açıklama: Öğrenci bilgilerini saklayacak tabloyu oluşturur. PRIMARY KEY otomatik artan (AUTOINCREMENT) davranış gösterir.
2.2 Veri Sorgulama (READ)
1
| %sql SELECT * FROM ogrenciler;
|
Açıklama: Tablodaki tüm kolonları (*) ve tüm satırları getirir. Boş tablo döner çünkü henüz veri eklenmemiştir.
2.3 Tekli Veri Ekleme (CREATE)
1
2
3
| %%sql
INSERT INTO ogrenciler(isim, yas, sehir)
VALUES ('Ali', 10, 'Istanbul');
|
Açıklama: Tabloya tek bir kayıt ekler. id otomatik olarak 1 atanır.
2.4 Belirli Kolonları Seçme
1
| %sql SELECT isim, yas FROM ogrenciler
|
Açıklama: Sadece isim ve yas kolonlarını getirir, veri miktarını azaltır.
2.5 Veri Silme (DELETE)
1
| %sql DELETE FROM ogrenciler WHERE id == 1
|
Açıklama: id değeri 1 olan kaydı siler. == veya = kullanılabilir.
2.6 Çoklu Veri Ekleme
1
2
3
4
5
6
| %%sql
INSERT INTO ogrenciler(isim, yas, sehir)
VALUES
('Ali', 10, 'Istanbul'),
('Veli', 20, 'Izmir'),
('Ayse', 30, 'Istanbul');
|
Açıklama: Tek bir INSERT ifadesiyle birden fazla kayıt ekler (batch insert).
3.1 Tek Kolon Güncelleme
1
2
3
4
| %%sql
UPDATE ogrenciler
SET yas = 15
WHERE id = 1
|
Açıklama: idsi 1 olan öğrencinin yaşını 15 olarak günceller.
3.2 Çoklu Kolon Güncelleme
1
| %sql UPDATE ogrenciler SET isim='Ahmet', sehir='Izmir' WHERE id=1
|
Açıklama: Birden fazla kolonu aynı anda günceller (isim ve şehir).
3.3 Koşullu Çoklu Güncelleme (CASE)
1
2
3
4
5
6
7
| %%sql
UPDATE ogrenciler
SET isim = CASE
WHEN isim = 'Veli' THEN 'Ali'
WHEN isim = 'Ayse' THEN 'Zehra'
ELSE isim
END;
|
Açıklama:
CASE yapısı ile koşullu güncelleme yapar- Veli → Ali, Ayşe → Zehra olarak değişir
ELSE isim: Eşleşmeyen kayıtları olduğu gibi bırakır
4.1 Koşullu Filtreleme (WHERE)
1
| %sql SELECT * FROM ogrenciler WHERE yas > 15
|
Açıklama: Yaşı 15’ten büyük olan öğrencileri getirir.
4.2 Sıralama (ORDER BY)
1
| %sql SELECT * FROM ogrenciler ORDER BY yas
|
Açıklama: Yaşa göre küçükten büyüğe (ASC - varsayılan) sıralar.
1
| %sql SELECT * FROM ogrenciler ORDER BY isim DESC
|
Açıklama: İsme göre büyükten küçüğe (Z→A) sıralar. DESC = Descending (azalan).
5.1 Temel Agregat Fonksiyonları
| Fonksiyon | Açıklama | Örnek |
|---|
COUNT(*) | Toplam kayıt sayısı | %sql SELECT COUNT(*) FROM ogrenciler |
AVG(yas) | Yaş ortalaması | %sql SELECT AVG(yas) FROM ogrenciler |
MIN(yas) | En küçük yaş | %sql SELECT MIN(yas) FROM ogrenciler |
MAX(yas) | En büyük yaş | %sql SELECT MAX(yas) FROM ogrenciler |
5.2 Gruplama (GROUP BY)
1
| %sql SELECT COUNT(*), sehir FROM ogrenciler GROUP BY sehir
|
Açıklama: Her şehirdeki öğrenci sayısını gruplayarak gösterir.
1
| %sql SELECT AVG(yas), sehir FROM ogrenciler GROUP BY sehir
|
Açıklama: Her şehrin yaş ortalamasını hesaplar.
6.1 Tablo Oluşturma
1
2
| %%sql
CREATE TABLE bos_tablo(id INTEGER);
|
Açıklama: Test amaçlı boş tablo oluşturur.
6.2 Tablo Silme
1
| %sql DROP TABLE bos_tablo;
|
Açıklama: bos_tablo tablosunu tamamen siler (veri + yapı).
6.3 Kolon Ekleme (ALTER TABLE)
1
| %sql ALTER TABLE ogrenciler ADD COLUMN email TEXT;
|
Açıklama: Mevcut tabloya yeni email kolonu ekler. Mevcut kayıtlarda bu alan NULL olur.
6.4 Yeni Kolona Veri Ekleme
1
2
3
4
5
6
7
8
| %%sql
UPDATE ogrenciler
SET email = CASE
WHEN id = 1 THEN 'xyz1@gmail.com'
WHEN id = 2 THEN 'xyz2@gmail.com'
WHEN id = 3 THEN 'xyz3@gmail.com'
ELSE email
END
|
Açıklama: Her öğrenciye ID’sine göre email adresi atar.
7.1 Bağlantı ve Cursor Oluşturma
1
2
3
4
| import sqlite3
conn = sqlite3.connect('ogrenci.db') # Veritabanı bağlantısı
cur = conn.cursor() # SQL çalıştırmak için cursor
|
Açıklama:
connect(): Veritabanına bağlanır (yoksa oluşturur)cursor(): SQL sorgularını çalıştırmak için imleç oluşturur
7.2 Tablo Listesini Görme
1
2
3
4
5
6
| cur.execute('''
SELECT name
FROM sqlite_master
WHERE type = 'table';
''')
cur.fetchall()
|
Açıklama: Veritabanındaki tüm tablo isimlerini getirir. sqlite_master SQLite’ın sistem tablosudur.
7.3 Veri Çekme Yöntemleri
| Yöntem | Açıklama |
|---|
fetchall() | Tüm sonuçları liste olarak getirir |
fetchone() | Tek bir satır getirir (tuple veya None) |
fetchmany(n) | İlk n satırı getirir |
1
2
3
4
5
6
7
| sql = 'SELECT * FROM ogrenciler;'
cur.execute(sql)
cur.fetchall() # Tüm kayıtlar
cur.fetchone() # İlk kayıt (cursor ilerler)
cur.fetchone() # İkinci kayıt
cur.fetchmany(1) # Sonraki 1 kayıt
|
7.4 Çoklu Kayıt Ekleme (executemany)
1
2
3
4
5
6
7
8
9
| lines = [
('Sezen', 24, 'Bursa'),
('Hakan', 45, 'Istanbul')
]
cur.executemany(
'INSERT INTO ogrenciler(isim, yas, sehir) VALUES(?, ?, ?)',
lines
)
|
Açıklama:
? placeholder’ları ile SQL injection’a karşı güvenli- Liste/tuple içindeki her eleman için aynı SQL’i çalıştırır
- Toplu veri eklemede performanslıdır
7.5 Çoklu SQL Komutu (executescript)
1
2
3
4
5
6
7
8
9
| cur.executescript("""
UPDATE ogrenciler
SET email = CASE
WHEN id = 5 THEN 'sezen@gmail.com'
ELSE email
END;
INSERT INTO ogrenciler(isim) VALUES ('Hayri');
""")
|
Açıklama:
- Noktalı virgülle ayrılmış birden fazla SQL komutunu tek seferde çalıştırır
- Güncelleme ve ekleme işlemlerini birleştirir