TypeError:missing 1 required positional argument hatası

sqlite3 ile bir kütüphane veritabanı yazmmaya çalışıyorum ama her seferinde şu hatayı alıyorum pycharm ise bazı parametrelerin verilmediğini söylüyor ne yapmam lazım?
kodlarım

bu kod classlar ve fonksiyonların olduğu dosyadan

import sqlite3

import time

class Kitap():

    def __init__(self,isim,yazar,yayınevi,tür,baskı):

        self.isim = isim
        self.yazar = yazar
        self.yayınevi = yayınevi
        self.tür = tür
        self.baskı = baskı


    def __str__(self):

        return "Kitabın Adı: {}\nKitabın Yazarı: {}\nYayınevi: {}\nKitabın Türü: {}\nKaçıncı Baskısı: {}".format(self.isim,self.yazar,self.yayınevi,self.tür,self.baskı)





class Kütüphane():

    def __init__(self):

        self.baglanti_olustur()




    def baglanti_olustur(self):

        self.baglanti = sqlite3.connect("KütüphaneDatabase.db")

        self.cursor = self.baglanti.cursor()

        sorgu = "CREATE TABLE IF NOT EXITS Kitaplık (isim TEXT,yazar TEXT,yayınevi TEXT,tür TEXT,baskı INT"

        self.cursor.execute(sorgu)

        self.baglanti.commit()




    def baglanti_sonlandir(self):

        self.baglanti.close()


    def kitaplari_goster(self):

        sorgu = "SELECT * FROM Kitaplık"

        self.cursor.execute(sorgu)

        kitaplar =  self.cursor.fetchall()

        if len(kitaplar) == 0:
            print("Kitaplıkta Kitap Bulunmuyor.")

        else:

            for i in kitaplar:

                kitap = Kitap(i[0],i[1],i[2],i[3],i[4])

                print(kitap)





    def kitap_ekle(self,kitap):

        sorgu = "INSERT INTO Kitaplık Values(?,?,?,?,?)"

        self.cursor.execute(sorgu,(kitap.isim,kitap.yazar,kitap.yayınevi,kitap.tür,kitap.baskı))

        self.baglanti.commit()


    def kitap_sorgula(self,isim):

        sorgu = "Select * From Kitaplık Where isim = ?"

        self.cursor.execute(sorgu,(isim))
        kitaplar = self.cursor.fetchall()

        if len(kitaplar) == 0:
            print("Hiçbir Kitap Kayıtlı Değil")

        else:
            kitap = Kitap(kitaplar[0][0],kitaplar[0][1],kitaplar[0][2],kitaplar[0][3],kitaplar[0][4])

            print(kitap)



    def kitap_sil(self,isim):

        sorgu = "Delete From Kitaplık Where isim = ?"

        self.cursor.execute(sorgu,(isim,))

        self.baglanti.commit()




    def baski_yukselt(self,isim):

        sorgu = "Select from Kitaplık Where isim = ?"

        self.cursor.execute(sorgu,(isim,))

        kitaplar = self.cursor.fetchall()

        if len(kitaplar) == 0:
            print("Böyle bir kitaplık bulunmuyor")

        else:
            for i in kitaplar:

                 baskı = i[0][4]

                 baskı += 1

                 sorgu2 = "Update Kitaplar set baskı = ? where isim = ?"

                 self.cursor.execute(sorgu2,(baskı,isim,))

                 self.baglanti.commit()
                 

bu kod ise kullanıcı girdilerinin alındığı ve fonkisyonların kullanıldığı dosyadan

from Kütüphane import *

print("""*************************************

Kütüphane Programına Hoşgeldiniz.

İşlemler;

1. Kitapları Göster

2. Kitap Sorgulama

3. Kitap Ekle

4. Kitap Sil 

5. Baskı Yükselt

Çıkmak için 'q' ya basın.

*********************************""")

while True:

    islem = input("Hangi İşlemi Yapmak İstersiniz? :")



    if islem == "1":

        Kütüphane.kitaplari_goster()


    elif islem == "2":
        isim = input("Hangi Kitabı İstiyorsunuz?:")
        print("Kitap Sorgulanıyor.")
        time.sleep(2)
        Kütüphane.kitap_sorgula(isim)

    elif islem == "3":

        isim = input("İsim:")
        yazar = input("Yazar:")
        yayınevi = input("Yayınevi:")
        tür = input("Tür:")
        baskı = int(input("Baskı"))

        yeni_kitap = Kitap(isim,yazar,yayınevi,tür,baskı)

        print("Kitap Ekleniyor.")

        time.sleep(2)

        Kütüphane.kitap_ekle(yeni_kitap)


    elif islem == "4":

        isim = input("Hangi Kitabı Silmek İstiyorsunuz?")

        dogrulama = input("Emin Misiniz ? E/H")

        if dogrulama == "E":

            print("Kitap Siliniyor.")
            time.sleep(2)
            Kütüphane.kitap_sil(isim)
            print("Kitap Silindi.")

        elif dogrulama == "H":
            print("Program Sonlandırılıyor.")
            break



    elif islem == "5":

        isim = input("Hangi Kitabın Baskısını Yükseltmek İstiyorsunuz?")
        print("Baskı Yükseltiliyor.")
        time.sleep(2)

        Kütüphane.baski_yukselt(isim)
        print("Baskı Yükseltildi")



    elif islem == "q":
        print("Program Kapatılıyor.")
        break


    else:
        print("Geçersiz işlem.")

edit: ikinci dosyada Kütüphane = Kütüphane() yapmaşım ve ilk dosya da table oluşturma sorgusunda hata yapmışım

Merhaba,

İkinci dosyanın 34. satırında Kütüphane sınıfının kitaplari_goster() metodunu Kütüphane.kitaplari_goster() şeklinde çağırıyorsunuz ama bu metod bir sınıf metodu değil, bir örnek metodu. Dolayısıyla önce Kütüphane sınıfından bir örnek oluşturmalı sonra örneği kullanarak kitaplari_goster() metodunu çağırmalısınız.

Aynı şekilde ikinci dosyanın 41. satırında Kütüphane sınıfının kitap_sorgula() metodunu, Kütüphane.kitap_sorgula(isim) şeklinde çağırıyorsunuz. Bu metod da bir sınıf metodu olmadığı, bir örnek metodu olduğu için aynı hatayı alıyorsunuz. İlk paragrafta bahsettiğim gibi önce Kütüphane sınıfından bir örnek oluşturmalı sonra örneği kullanarak kitap_sorgula() metodunu çağırmalısınız.

Yine, 70. ve 85. satırlarda benzer durumlar söz konusu. 70. satırdaki Kütüphane.kitap_sil(isim) ifadesi ile 85. satırdaki Kütüphane.baski_yukselt(isim) ifadesi benzer hatalar almanıza neden olacaktır.

Sorunu çözmek için izleyebileceğiniz yollardan birisi bu yukarıda bahsettiğim metodları birer sınıf metoduna dönüştürmek. Ama, bu bahsettiğim metotların hepsinde self.cursor ve bir kısmında self.baglanti nitelikleriyle işlem yapıldığı ve bu nitelikler self.baglanti_olustur() metodu çağrıldığı zaman tanımlandıkları için, bahsettiğim metotları sınıf metotlarına dönüştürseniz bile hata alırsınız. Dolayısıyla metotları sadece sınıf metoduna dönüştürmek dışında başka değişiklikler de yapmalısınız.

İzleyebileceğiniz diğer yol ise, __init__ metodunu silmek ve baglanti_olustur() metodunun ismini __init__ metodu olarak değiştirmek. Daha sonradan da Kütüphane sınıfından bir örnek oluşturabilir ve bu örneği kullanarak örnek metotlarını çağırabilirsiniz. Yani while döngüsüne girmeden şöyle bir satır ekleyebilirsiniz.

Kütüphane = Kütüphane()

while True:

Bir başka hata veritabanı oluşturulurken kullandığınız sorgu:

sorgu = "CREATE TABLE IF NOT EXITS Kitaplık (isim TEXT,yazar TEXT,yayınevi TEXT,tür TEXT,baskı INT"

Bu sorguda, EXISTS yazmanız gerekirken EXITS yazmışsınız ve açmış olduğunuz parantezi kapatmamışsınız.

1 Beğeni