- Bağlantıyı al
- X
- E-posta
- Diğer Uygulamalar
- Bağlantıyı al
- X
- E-posta
- Diğer Uygulamalar
Önceki bölümde, SELECT komutuyla tablodaki tüm kayıtları çekmeyi öğrendik. Ancak gerçek dünya uygulamalarında, genellikle belirli bir kullanıcıya, ID'ye veya e-posta adresine ait kayıtları çekmek isteriz. İşte bu noktada, SQL'in güçlü filtreleme aracı olan WHERE koşulu devreye girer. Bu bölümde, WHERE koşulunu kullanarak müşterileri ID gibi belirli bir kritere göre nasıl filtreleyeceğimizi ve bu filtrelemeyi yaparken yine güvenli %s yer tutucularını nasıl kullanacağımızı göreceğiz.
select_where.py adında bir dosya oluşturalım:
import mysql.connector
from config import DB_CONFIG
try:
# 1. Veritabanına Bağlanma
mydb = mysql.connector.connect(**DB_CONFIG)
mycurser = mydb.cursor()
# 2. SELECT Sorgusunu WHERE koşulu ile tanımlama
# id'si, Python'dan gelecek değere (%s) eşit olan kaydı seç.
SELECT_SQL = "SELECT * FROM musteriler WHERE id = %s"
# 3. Filtreleme Değerini Tanımlama
# Filtrelenecek ID değerini içeren tuple.
# Tek elemanlı tuple'larda sonuna virgül (,) eklenmesi önemlidir.
aranan_id = (3,)
# 4. Sorguyu Çalıştırma (SQL ve Değeri AYRI AYRI gönderiyoruz)
# Güvenlik için, aranan ID değerini execute metoduna ayrı
# bir parametre olarak iletiyoruz.
mycurser.execute(SELECT_SQL, aranan_id)
# 5. Sonuçları Çekme (fetchone())
# WHERE koşulu genellikle tek bir kayıt döndüreceği
# için 'fetchone' kullanıyoruz.
kayit = mycurser.fetchone()
# 6. Kaydı İşleme
if kayit:
# Tuple içindeki elemanlara indeksleri ile erişilir
# (0:id, 1:isim, 2:email, 3:kayit_tarihi)
print(f"\nID'si {kayit[0]} olan müşterinin bilgileri:")
print(f" İsim: {kayit[1]}, E-mail: {kayit[2]}, Kayıt Tarihi: {kayit[3]}")
else:
print(f"ID'si {aranan_id[0]} olan müşteri bulunamadı.")
except mysql.connector.Error as err:
# Bağlantı veya diğer hataları yakala
print(f"\nBağlantı hatası: {err}")
print("Lütfen bağlantı ayarlarını kontrol edin.")
finally:
# Bağlantıları kapatma
if 'mycurser' in locals() and mycurser:
mycurser.close()
if 'mydb' in locals() and mydb and mydb.is_connected():
mydb.close()
print("MySQL bağlantısı kapatıldı.")
Bu kod, veritabanından belirli bir kritere uyan tek bir kaydı güvenli bir şekilde nasıl çekeceğimizi gösterir.
Güvenli Filtreleme (Placeholder):
SELECT_SQL = "SELECT * FROM musteriler WHERE id = %s" sorgusunda, aradığımız değer yerine yine %s yer tutucusunu kullanıyoruz. Bu, SQL Enjeksiyonuna karşı güvenlik sağlar.
Filtre Değeri (tuple):
aranan_id = (3,) satırında, sorguya göndereceğimiz değeri bir tuple (demet) içinde tanımlarız. Tek bir değer gönderirken bile, Python'da bunu tuple olarak belirtmek için değerden sonra bir virgül (,) koymak zorunludur.
Sorguyu Çalıştırma:
mycurser.execute(SELECT_SQL, aranan_id) komutu, SELECT sorgusunu ve filtreleme değerini ayrı ayrı gönderir. MySQL sürücüsü bu sayede, filtreleme değerini sorguya güvenli bir şekilde yerleştirir.
Tek Kayıt Çekme (fetchone()):
WHERE id = ... gibi birincil anahtar (Primary Key) ile filtreleme yaptığımızda genellikle en fazla tek bir sonuç bekleriz. Bu nedenle, mycurser.fetchone() metodu kullanılır. Bu metot, sorgunun döndürdüğü ilk satırı bir tuple olarak döndürür. Eğer sonuç yoksa None döndürür.
Veriyi İşleme:
if kayit: kontrolü ile kaydın bulunup bulunmadığı denetlenir.
Kayıt bulunmuşsa, kayit[0], kayit[1], vb. indeksler kullanılarak müşteri bilgileri ekrana yazdırılır.
Yorumlar
Yorum Gönder