Python Masaüstü Uygulaması - 2: SQLite3 ile Kayıt Ekleme ve Listeleme

kusha · 03 Ağustos 2026 · 7 dk okuma

Önceki derste PyQt5 arayüzümüzü tasarlamıştık. Şimdi bu arayüzü sqlite3 ile birleştirip gerçek bir kayıt uygulamasına dönüştüreceğiz — veriler bu sefer bir sunucuya değil, bilgisayarınızdaki tek bir dosyaya (.db) kaydedilecek.

Veritabanı Bağlantısı ve Tablo Oluşturma

import sqlite3

baglanti = sqlite3.connect("kayit.db")
cursor = baglanti.cursor()

cursor.execute(
    "CREATE TABLE IF NOT EXISTS kayit (ad TEXT, soyad TEXT, sirket TEXT)"
)
baglanti.commit()

sqlite3.connect("kayit.db"), belirtilen dosya yoksa onu otomatik oluşturur — ayrıca bir sunucu kurmanıza gerek yoktur, bu sqlite3'ün en büyük pratik avantajıdır.

Tablo Başlıklarını Ayarlamak

self.tbl1.setHorizontalHeaderLabels(["Ad", "Soyad", "Şirket"])

Kayıt Ekleme Fonksiyonu

def kayit_ekle(self):
    ad = self.ln1.text()
    soyad = self.ln2.text()
    sirket = self.cmb1.currentText()

    cursor.execute(
        "INSERT INTO kayit VALUES (?, ?, ?)", (ad, soyad, sirket)
    )
    baglanti.commit()
    self.statusBar().showMessage("Kayıt eklendi.", 3000)
    self.kayit_listele()
  • self.ln1.text(), bir Line Edit bileşenine kullanıcının yazdığı metni okur.
  • ? yer tutucuları ve ayrı parametre demeti ((ad, soyad, sirket)), SQL enjeksiyonuna karşı korunmanın standart yoludur — sqlite3'te de MySQL'de olduğu gibi değerleri asla doğrudan string birleştirmeyle sorguya eklemeyin.
  • Kayıt eklendikten hemen sonra self.kayit_listele() çağrılması önemlidir — aksi halde tabloyu yeniden açmadan yeni kaydı göremezsiniz.

Butonu Fonksiyona Bağlamak

self.btn1.clicked.connect(self.kayit_ekle)

Kayıtları Tabloya Listelemek

def kayit_listele(self):
    self.tbl1.setRowCount(0)
    cursor.execute("SELECT * FROM kayit")

    for satir_no, satir in enumerate(cursor.fetchall()):
        self.tbl1.insertRow(satir_no)
        for kolon_no, deger in enumerate(satir):
            self.tbl1.setItem(satir_no, kolon_no, QTableWidgetItem(str(deger)))

str(deger) dönüşümü önemlidir — QTableWidgetItem, sayısal bir değeri doğrudan kabul etmez, metin (string) bekler.

Uygulama Açıldığında Otomatik Listeleme

def __init__(self):
    super().__init__()
    self.setupUi(self)
    self.btn1.clicked.connect(self.kayit_ekle)
    self.kayit_listele()

__init__ içinde self.kayit_listele() çağırmak, uygulama her açıldığında var olan kayıtların otomatik olarak tabloya yüklenmesini sağlar.

Sırada Ne Var?

Sırada, bu uygulamaya kayıt silme ve şirkete göre filtreleme özelliklerini ekleyeceğiz.