SQLite3-de syntax error

Merhaba.sqlite3-de kullanicidan isim,soyisim,sinif,not inputlarini aldikdan sonra bu inputlari bir tabloya eklemeye calisdim.ama:

sqlite3 OperationalError: near "?": syntax error

diye bir error verdi.syntax hatasi diyor.bakdim ama bulamadim.kodlari paylasiyorum yardimci olursaniz sevinirim:

import sqlite3 as sql
con = sql.connect("sagirdler.sqlite")
cur = con.cursor()
cur.execute("""CREATE TABLE IF NOT EXISTS sagirdler (ad,soyad,sinif,qiymet)""")
while True:
    print(
        """
        1.sagird elave et
        2.sagird sil
        3.sagirdleri goster 
        4.cix
        """
    )
    secim = int(input("etmek istediyiniz isin nomresini secin: "))

    def elave():
        ad = input("sagirdin adini girin: ")
        soyad = input("sagirdin soyadini girin: ")
        sinif = int(input("sagirdin sinifini girin: "))
        qiymet = int(input("sagirdin qiymetini girin: "))
        ad = ad.lower()
        soyad = soyad.lower()
        cur.execute("""INSERT INTO sagirdler (?,?,?,?)""", (ad,soyad,sinif,qiymet))
        print(ad, soyad, "sisteme elave olundu!")
        con.commit()
    

    def sil():
        ad = input("silinmesini istediyiniz sagirdin adini girin: ")
        soyad = input("silinmesini istediyiniz sagirdin soyadini girin: ")
        sinif = int(input("silinmesini istediyiniz sagirdin sinifini girin: "))
        ad = ad.lower()
        soyad = soyad.lower()
        cur.execute("""DELETE FROM sagirdler WHERE ad=? AND soyad=? AND sinif=?""",(ad,soyad,sinif))
        print(ad, soyad, "sistemden silindi!")
        con.commit()
    

    def goster():
        cur.execute("""SELECT * FROM sagirdler""")
        veriler = cur.fetchall()
        print(veriler)

    if secim == 1:
        elave()
    elif secim == 2:
        sil()
    elif secim == 3:
        goster()
    elif secim == 4:
        break
    else:
        print("lanet herif")
        print("xahis olunur gosterilen nomrelerden birini secin!")
        continue

not:hata elave adli fonksiyon calistirilirken ortaya cikti.

? yerine formatla yapmayı deneyin bir

denedim olmadi

hata nedir?..

burada hata geldimi onu sordum asıl sorunun sebebini anlayamadım alternatif çözümler önermeye çalışıyorum :slight_smile:

Oyle yapinca unused variable(kullanilmayan degsiken) hatasi veriyor.yani sqlite degiskenleri gormuyor

1 Beğeni

UPDATE customers SET address = %s WHERE address = %s


böyle string formating yapanda var çalışıyor galiba deneyebilirsin
eğer çalışırsa bu sefer aklım format metodunda kalır neden çalışmadı diye :rofl:

1 Beğeni

Rahat olun calismadi: ) : (

1 Beğeni

Yalniz bu ekleme degil guncelleme icin olan kod.buyuk ihtimalle %s yontemini bildirmek istediniz

1 Beğeni

evet belirttim zaten

ama %s yontemi eski bir yontem guvenlik aciklari oldugu icin tavsiye edilmiyor.

bu sorun sanırım string formatting ile alakalı değil çünkü sadece “?” için değil aynı hatadan çok var ve hepsinde de aynı şeyi yapıyorlar sanırsam
mesela


anlamadım güvenlik açığı derken? neyin güvenliği?
ikiside string formatlama .format ta kullanabilirsin onuda hatta f-string de kullanabilirsin

https://python-istihza.yazbel.com/standart_moduller/sqlite.html

sorunu buldum VALUES eklememişsin :smiley:
örnek bir kod mesela


.execute(""“INSERT INTO personel VALUES
(?, ?, ?)”"", veri)


Tesekkurler.6,7 saat durmadan calisinca olacagi budur.

1 Beğeni

SQL içine değişken eklerken kullanılması önerilen yöntem “?” işareti, str.format veya “%” ile formatlama değil.

Eski olması ile alakası yok, yöntemin kendisinde de bir güvenlik açığı yok. Herhangi bir güvenlik problemi yaşamadan stringleri % ile formatlayabiliriz. Asıl problem en son elde edeceğimiz string’i SQL olarak kullanmak istediğimizde ortaya çıkıyor, küçük dikkatsizlikler sonucunda SQL kodunun yapacağı işlem tamamen değişebilir.

Evet, sorun “?” karakterine özel değil. Hata INSERT INTO sagirdler (?,?,?,?) SQL kodunda sözdizimsel bir yanlış bulunduğunu söylüyor.

Kullanılması gereken sözdizimini en son @asanadam1 atmış.

1 Beğeni