Resim

MySQL Select (WHERE Kullanımı)

MySQL Select (WHERE Kullanımı)

Ö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.

Kodun Tamamı

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ı.")

Kodun Açıklaması

Bu kod, veritabanından belirli bir kritere uyan tek bir kaydı güvenli bir şekilde nasıl çekeceğimizi gösterir.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

📹ÖĞRENDİKLERİNİZİ PEKİŞTİRİN:
Hemen aşağıdaki videomuza tıklayın. Adım adım ilerleyerek öğrendiklerinizi görsel olarak pekiştirin ve bir sonraki konuya hatasız bir şekilde geçin!



Yorumlar

Bu blogdaki popüler yayınlar

Python random Modülü

Python print()

Yazılım Nedir?