SQLite miras alma sorunu

Merhaba SQLlite kendim için bir sınıfa miras atamak istiyorum ama kodu çalıştırdığımda
line 2, in
class database(sql):
TypeError: module() takes at most 2 arguments (3 given)

hatası alıyorum

Merhaba,

Şöyle deneyin:

import sqlite3


class SQL(sqlite3.Connection):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)


sql  = SQL("test.db")
cursor = sql.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS test(x, y)")
1 Beğeni

çok teşekkür ederim yazdığın şekilde oldu Connection niye yazdık acaba anlatma şansın var mı

Çünkü connect fonksiyonu, Connection sınıfından örnek oluşturan bir yapıcı fonksiyon.

>>> import sqlite3
>>> type(sqlite3.connect("a.db"))
<class 'sqlite3.Connection'>
>>> 
1 Beğeni

çok teşekkür ederim :smile:

Merhaba,

Miras almak yerine sinifin ornegini bir member degiskenine atayip kullanmak daha saglikli olacaktir. (bkz: composition over inheritance)

1 Beğeni

@aib’in bahsettiği yaklaşımı şöyle örnekleyebiliriz:

import sqlite3


class SQL:
    def __init__(self, db_name):
        self.connect = sqlite3.connect(db_name)
        self.cursor = self.connect.cursor()

    def execute(self, query):
        self.cursor.execute(query)
        self.connect.commit()


sql = SQL("test.db")
sql.execute("CREATE TABLE IF NOT EXISTS test(x, y)")

Burada, sqlite3.Connection’ı miras almak yerine, var olan bir sınıfı oluşturacağımız sınıfın içinde kullandık.

Bu arada aşağıdaki başlığı da incelemek isteyebilirsiniz:

2 Beğeni