Ö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(), birLine Editbileş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.