Python - Sqlite3'de Veri Bulma Sorunları

Merhaba,

Veri tabanında kayıtlı veriler içerisinde arama yaparken, bulmak istediğim verinin tamamını yazmam gerekiyor. Hatta küçük büyük harf uyumunda bile hassas davranıyor.

Safa Tevhid Menek kaydına ulaşmak için Sadece Safa yazarak veya Tev yazarak veri tabanında içinde Safa geçen Tev geçen tüm verileri çekip almasını istiyorum. Bunu nasıl yaparım?

1 Beğeni

aranan_deger = “Sefa”

WHERE aramayapilan_sutun_adi LIKE ‘%aranan_deger%’

% işareti 0 veya daha fazla karakter anlamına gelir ve like kelimesi ile karşılaştırma yapılır.

2 Beğeni

işe yaramadı desem inanır mısınız?

Kodu görmeden inanmayız.

4 Beğeni

Bu sizin için bir sorun olabilir, fakat olması gereken bu. Bunu aşmak için aranan sütunu upper() içerisine alarak her zaman hepsi büyükmüş gibi arama yapabilirsiniz.

Bir yerlerde hata yapmışsınızdır. Bunun için veri tabanından örnek verseniz çözüme varmamız daha kolay olur.

1 Beğeni

Veriyi ararken kullandığım fonksiyon

    def arama_yap(self):

        self.etiket = Label(self.frame_1, text=datetime.now(), width=22, fg="blue").grid(row=1, column=6)

        self.veri_1 = self.firma_adi.get()

        if len(self.veri_1) >= 3:

            self.con = sqlite3.connect("database/database.db")
            self.cursor = self.con.cursor()

            self.cursor.execute("SELECT * FROM ARSIV_DOSYALARI WHERE FIRMA_ADI LIKE self.veri_1")
            self.data = self.cursor.fetchall()

            if len(self.data) > 0:

                self.etiket = Label(self.frame_1, text="FİRMA BULUNDU!", width=22, fg="green").grid(row=1, column=5)

                self.sutun = 1
                self.satir = 4

                for self.i in self.data:

                    for self.ii in self.i:
                        self.etiket = Label(self.frame_1, text=self.ii, width=15)
                        self.etiket.grid(row=self.satir, column=self.sutun)

                        self.sutun += 1

                    if self.sutun == 9:
                        self.sutun = 1
                        self.satir += 1

            else:

                self.etiket = Label(self.frame_1, text="FİRMA BULUNAMADI!", width=22, fg="red").grid(row=1, column=5)

        else:

            self.etiket = Label(self.frame_1, text="FİRMA BULUNAMADI!", width=22, fg="red").grid(row=1, column=5)

Tablonun oluşturulma bilgisi

cursor.execute("CREATE TABLE IF NOT EXISTS ARSIV_DOSYALARI (FIRMA_ADI TEXT, BASLANGIC_TARIHI TEXT, BITIS_TARIHI TEXT, ANA_KONUM TEXT, ALT_KONUM TEXT, ACIKLAMA TEXT, KAYIT_EDEN TEXT, KAYIT_TARIHI TEXT)")

İlk olarak Sqlite ile parametre gönderirken soru işareti (?) kullanmanız gerekiyor. Böylelikle, Sqlite sırasıyla verilen soru işaretlerine ilgili paremetreleri atar.

İkinci olarak da

burada da bahsedildiği gibi wildchard kullanmanız da gerekecek. Yani kodunuzu şöyle değiştirmeniz gerekiyor:
self.cursor.execute("SELECT * FROM ARSIV_DOSYALARI WHERE FIRMA_ADI LIKE ?",('%'+self.veri_1+'%',))

2 Beğeni

Normalde bunu kullanıyorum fakat yukarıdaki örneğe bakarak ? kısmının olmadığını düşündüğüm için böyle oldu.

bunun yazım şeklini doğru yapamamışım fakat

Buradaki şeklinde yaptım ve oldu çalıştı.

Herkese teşekkür ederim. İyi forumlar <3

2 Beğeni

mdl = aranacak kelime veya harf
mdl = mdl + ‘%’
name = (“(‘%s’, adsoyad)” % mdl)
baglanti = self.baglan()
sorgu = baglanti.cursor()
sorgu1 = (“SELECT no,adsoyad,telefon,email FROM icerik WHERE LIKE %s” % name) # tuple %s kullanıldı
sorgu.execute(sorgu1)
listeye_ekle = sorgu.fetchall()
print(listeye_ekle)
ben bu şekilde çözüm buldum sen kendine göre değiştirip kullanabilirsin