“OperationalError: no such column:” Hatası ve Çözümü

Python’da sqlite3 modülü ile çalışıp ufak bir telefon rehberi yazmayı denerken şöyle bir hata alıyordum:

Hatanın çözümü ile uğraşırken hem sqlite ile veritabanı güvenliği için istihza.com da okuduğum Fırat Özgül’ün yazısı hem de aynı hatayı alanların çözümleri bir araya gelince %s yerine ? kullanmanın gerekliliğini anladım. Kısacası yukarıdaki hatayı şu tip bir kod kullanırken almanız normal:

#-*-coding:utf8-*-
class ekle():
    def isles(self,ad,soyad,no,no2):
        import sqlite3

        self.baglanti=sqlite3.connect("xx.db")
        self.imlec=self.baglanti.cursor()
        self.imlec.execute("INSERT INTO rehber(isim,soyisim,telefon,telefon2) VALUES(%s,%s,%s,%s)" %(ad,soyad,no,no2))

        self.baglanti.commit()
        self.baglanti.close()

Düzeltilmiş hali ise şu şekilde, denedim çalışıyor.

#-*-coding:utf8-*-
class ekle():
    def isles(self,ad,soyad,no,no2):
        import sqlite3

        self.baglanti=sqlite3.connect(":memory:")
        self.imlec=self.baglanti.cursor()
        self.imlec.execute("""CREATE TABLE rehber(isim,soyisim,telefon,telefon2)""")
        self.imlec.execute("""INSERT INTO rehber(isim,soyisim,telefon,telefon2) VALUES(?, ?, ?, ?)""",(ad,soyad,no,no2))

        self.baglanti.commit()
        self.baglanti.close()
# Sınıfımızı örneklendirip nesne haline getirelim ve deneyelim.
ss=ekle()
ss.isles(u"gry",u"ylıdrm",u"45fd432",u"543fd54")