SQLite3 veri arama işlevi

bu arayüz kısmındaki arama fonksiyonum

def go_ara():
    go_tree.delete(*go_tree.get_children())
    for go_veri in go_db.go_veriarama(tarih=ent_tarih.get(), firma=ent_firma.get(), aciklama=ent_aciklama.get()):
        go_tree.insert(parent="", index=END, values=go_veri)

database kısmındaki arama fonksiyonum

    def go_veriarama(self, tarih, firma, aciklama):
        self.cur.execute("SELECT * FROM gunlukolaylar WHERE tarih=? or firma=? or aciklama=?", (tarih, firma, aciklama))
        sonuc = self.cur.fetchall()
        print(sonuc)
        return sonuc

sorgularım doğru çalışıyor, ama örnek vermek gerekirse firma aratmak istediğimde “Seç Market” tam yazmazsam Seç olarak Seç Marketlerin kayıtlarını bulmuyor. Açıklama kısmında mesela “aidat” yazdığımda açıklamanın neresinde olursa olsun bulup listelemenin bir yolu var mı?.

SQL sorgunda joker karakter kullanabilirsin. % joker karakterini değişkenlerin başına ve sonuna ekle örneğin.

Yani şunu bir dene.

    def go_veriarama(self, tarih, firma, aciklama):
        firma = '%' + firma + '%'
        aciklama = '%' + aciklama + '%'
        self.cur.execute("SELECT * FROM gunlukolaylar WHERE tarih=? or firma=? or aciklama=?", (tarih, firma, aciklama))
        sonuc = self.cur.fetchall()
        print(sonuc)
        return sonuc

Bunun da şöyle dezavantajları var ama, or kullandığın için ve joker karakter olduğundan bütün durumları listeler. Bu yüzden dolu olanda joker karakter kullanırsın. (Boş olanları jokersiz gönderirsin sorguya)

Edit: @aib in uyarması iyi olmuş benim yazdığım kod yanlış LIKE ifadesi olmalı evet.

LIKE ifadesi kullanabilirsin. …WHERE firma LIKE '%Seç%'… Ozellikle % ile baslayan aramalarda yavas olur ama en azindan calisir. Bu isin dogrusu full-text search (linkteki MATCH) ama orada da yazdigi gibi extension’lar, ekstra kurulumlar istiyor.

2 Beğeni

konuma cevap verdiğiniz için teşekkürler. Verdiğiniz çözümleri kullanmak benim için ilerleyen zamanlarda öğrenme seviyemi ilerletmem ile mümkün olacak.