Python sql yardım


#1

from tkinter import *

from tkinter import ttk
import sqlite3

class Kütüphane:
    database='kütüphane.db'

    def __init__(self,pencere):
        self.pencere = pencere
        self.pencere.resizable(width=FALSE,height=FALSE)
        self.pencere.title('Kütüphane Programı')
        frame=LabelFrame(self.pencere,text='Kayıt Bölümü')
        frame.grid(row=0,column=1)
        Etiket1 = Label(frame,text='Kitap Adı:').grid(row=1,column=1)
        self.Giris = Entry(frame)
        self.Giris.grid(row=1,column=2)
        Etiket1 = Label(frame, text='Yazar Adı:').grid(row=2, column=1)
        self.yazargiris = Entry(frame)
        self.yazargiris.grid(row=2, column=2)
        Etiket1 = Label(frame, text='Begenme_Durumu:').grid(row=3, column=1)
        self.Begenme_Durumu = Entry(frame)
        self.Begenme_Durumu.grid(row=3, column=2)
        ttk.Button(frame,text='Yeni Kayıt',command=self.kayit2).grid(row=4,column=2)
        self.message = Label(text='',fg='red')
        self.message.grid(row=4,column=0)

        Etiket1 = Label(frame, text='Kitap Adını Giriniz:').grid(row=1, column=20)
        self.Bul_Bölümü = Entry(frame)
        self.Bul_Bölümü.grid(row=1, column=21)
        ttk.Button(frame, text='Bul',command=self.Bul_alani).grid(row=1, column=25)


#self.tree kısmında columns ifadesi bizim sütüunlarımızın adlarını temsil ediyor
        self.tree = ttk.Treeview(height=10,columns=('B','C','D'))
        kaydirma = ttk.Scrollbar(orient='vertical', command=self.tree.yview)
        self.tree.configure(yscrollcommand=kaydirma.set)
        self.tree.grid(row=5,column=0,columnspan=30)
        self.tree.heading('#0', text='Kitap No', anchor='w')
        self.tree.heading('B',text='Kitap Adı',anchor='w')
        self.tree.heading('C', text='Yazar Adı', anchor='w')
        self.tree.heading('D', text='Begenme Durumu', anchor='w')
        ttk.Button(text='Kayıt Düzenle',command=self.düzenleme).grid(row=6,column=15)
        ttk.Button(text='Kayıt Sil',command=self.silme).grid(row=6, column=14)

        self.kayit_gorüntü()
    def baglanti(self,sira,parametre=()):
        with sqlite3.connect(self.database) as con:
            cursor = con.cursor()
            sira_sonuc=cursor.execute(sira,parametre)
            con.commit()
        return sira_sonuc
    def kayit_gorüntü(self):
        kayitlar=self.tree.get_children()
        for element in kayitlar:
            self.tree.delete(element)
        sira = 'Select * from Kitaplar  order by Kitap_No desc'
        database_sutun = self.baglanti(sira)
        for sutun in database_sutun:
#Normalde insert yapınca sütunlar gelmiyor ama sutun[1:4] gibi beliritnce tüm sutunlar geliyor
            self.tree.insert('',0,text=sutun[0],values=sutun[1:4])
#......................Yeni kayıtla  ilgili bölüme geçiyoruz.......
    def kayit(self):
        return len (self.Giris.get () ) !=0 and len(self.yazargiris.get()) !=0 and len(self.Begenme_Durumu.get()) !=0
    def kayit2(self):
        if self.kayit():
            sira='insert into Kitaplar values (NULL,?,?,?)'
            parametre=(self.Giris.get(),self.yazargiris.get(),self.Begenme_Durumu.get())
            self.baglanti(sira,parametre)
            self.message['text'] = 'Kayıt {} eklendi'.format(self.Giris.get())
            self.message['fg']='blue'
            self.Giris.delete(0,END)
            self.yazargiris.delete(0,END)
            self.Begenme_Durumu.delete(0,END)
        else:
            self.message['text']='Bilgileri girilmemiş satır mevcut'
            self.message['fg'] = 'red'
        self.kayit_gorüntü()
#Kayıt Silme işlemini yapıyoruz
    def silme(self):
        self.message['text'] = ''
        try:
            self.tree.item(self.tree.selection())['values'][0]
        except IndexError as e:
            self.message['text'] = 'Kayıt seçiniz'
            return
        self.message['text'] = ''
        isim=self.tree.item(self.tree.selection())['values'][0]
        sira='Delete  from Kitaplar  Where Kitap_Adi = ?'
        self.baglanti(sira,(isim, ))
        self.message['text'] = '{} Kaydınız silinmiştir'.format(isim)
        self.kayit_gorüntü()
    def düzenleme(self):
        self.message['text']=''
        try:
            self.tree.item(self.tree.selection())['values'][2]
        except IndexError as e:
            self.message['text'] = 'Lütfen kayıt seçiniz'
            return
        name = self.tree.item(self.tree.selection())['values'][0]
        eski_Kitap_Yazarı = self.tree.item(self.tree.selection())['values'][1]
        eski_Begenme_Durumu = self.tree.item(self.tree.selection())['values'][2]

        self.edit_wind=Toplevel ()
        self.edit_wind.geometry('325x225+200+200')
        self.edit_wind.title('Düzenleme Bölümü')
        Label(self.edit_wind,text='Eski Kitap Adı:',).grid(row= 0, column=1)
        Entry(self.edit_wind,textvariable = StringVar(self.edit_wind,value=name),state= 'readonly').grid(row=0,column=2)
        Label(self.edit_wind, text='Yeni Kitap Adı:', ).grid(row=1, column=1)
        new_name=Entry(self.edit_wind)
        new_name.grid(row=1,column=2)

        Label(self.edit_wind, text='Eski Yazar Adı:', ).grid(row=2, column=1)
        Entry(self.edit_wind, textvariable=StringVar(self.edit_wind, value=eski_Kitap_Yazarı), state='readonly').grid(row=2,column=2)
        Label(self.edit_wind, text='Yeni Kitap Yazarı:', ).grid(row=3, column=1)
        Yeni_Kitap_Yazari = Entry(self.edit_wind)
        Yeni_Kitap_Yazari.grid(row=3, column=2)
#3.Değişkenimiz(eski_begenme_durumu) veri tipini text olduğu için onu text olarak belirttik
        Label(self.edit_wind, text='Eski Begenme Durumu:', ).grid(row=4, column=1)
        Entry(self.edit_wind, textvariable=StringVar(self.edit_wind, value=eski_Begenme_Durumu), state='readonly').grid(row=4, column=2)
        Label(self.edit_wind, text='Yeni Begenme Durumu:', ).grid(row=5, column=1)
        Yeni_Begenme_Durumu = Entry(self.edit_wind)
        Yeni_Begenme_Durumu.grid(row=5, column=2)


        A=Button(self.edit_wind,text='Değişiklikleri Kaydet',command = lambda:self.kayıt_düzenleme2(new_name.get(),name,Yeni_Kitap_Yazari.get(),
        eski_Kitap_Yazarı,Yeni_Begenme_Durumu.get(),eski_Begenme_Durumu))
        A.grid(row=6,column=2,sticky=W)
        self.edit_wind.mainloop()
    def kayıt_düzenleme2(self,new_name,name,Yeni_Kitap_Yazari,eski_Kitap_Yazarı,Yeni_Begenme_Durumu,eski_Begenme_Durumu):
        sira='Update Kitaplar set Kitap_Adi=?,Yazar_Adi=?,Begenme_Durumu=? where Kitap_Adi=? and Yazar_Adi=? and Begenme_Durumu=? '
        parametre=(new_name,Yeni_Kitap_Yazari,Yeni_Begenme_Durumu,name,eski_Kitap_Yazarı,eski_Begenme_Durumu)
        self.baglanti(sira,parametre)
        self.edit_wind.destroy()
        self.message['text']='Düzenleme {} yapıldı'.format(name)
        self.kayit_gorüntü()
    def Bul_alani(self):
        a=self.Bul_Bölümü.get()
        b='Select Yazar_Adi from Kitaplar where Kitap_Adi=?'
        c='Select Begenme_Durumu from Kitaplar where Kitap_Adi=?'
        x=self.baglanti(b,(a,))
        y=print(self.baglanti(c,(a,)))

        self.edit_ek = Toplevel()
        self.edit_ek.geometry('325x225+200+200')
        self.edit_ek.title('Düzenleme Bölümü')

        Label(self.edit_ek, text='Kitap Adı:', ).grid(row=0, column=1)
        Entry(self.edit_ek, textvariable=StringVar(self.edit_ek, value=a), state='readonly').grid(row=0, column=2)

        Label(self.edit_ek, text='Yazar Adı:', ).grid(row=1, column=1)
        Entry(self.edit_ek, textvariable=StringVar(self.edit_ek, value=x), state='readonly').grid(row=1, column=2)

        Label(self.edit_ek, text='Begenme Durumu:', ).grid(row=2, column=1)
        Entry(self.edit_ek, textvariable=StringVar(self.edit_ek, value=y), state='readonly').grid(row=2, column=2)






if __name__=='__main__':
    pencere = Tk()
    application = Kütüphane(pencere)
    pencere.mainloop()


Arkadaşlar Merhaba class içerisinde oluşturduğum def ile sql ile bağlantı yaptım…Yalnız daha sonra aynı class
içerisinde oluşturduğum başka bir def ile sorgu yapıyorum.Yalnız resimlerde gördüünüz gibi eşitlikte tanımladığım ‘x’ ve ‘y’ üzerinde değerleri eşitleyemiyorum.Çözüm önerisi olan var mı


#2

x'in sağındaki deyim doğru gibi. Yine de ne sonuç alınıyor, hata ayıklayarak (debug) öğrenebilirsiniz.
y'nin sağındaki ifade yanlış. print fonksiyonu herhangi bir değer döndürmez, sadece yazdırma işlemi yapar.


#3

açılan toplevel’da entry değeri boş geliyor…Mail adresinizi yollarsamız eğer,database dosyamıda yollamak isterim.Çalıştırıp hatayı daha iyi gözlemleyebilirsiniz

Teşekkür ederim


#4

Burada paylaşsanız daha iyi olur.


#5

uzantıya izin vermiğyor.(db uzantılı olduğu için


#6

Üçüncü taraf bir dosya paylaşma servisine yükleyip burada bağlantısını paylaşabilirsiniz.