Çözüldü Python SQLite veri girilemiyor

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

furkaniko

Hectopat
Katılım
17 Mart 2021
Mesajlar
249
Çözümler
1
Daha fazla  
Cinsiyet
Erkek
Meslek
Siber Güvenlik Uzmanı
Merhaba, Python ile yazmış olduğum programdan veritabanına data giremiyorum. Program sorunsuz çalışıyor, kaydet butonuna basıyorum, veritabanına giriyorum, bilgi yok. Nerede yanlış yapıyorum?

[CODE title="ilgili kaydetme komutlarım"]# Veritabanı Oluşturma
veritabani = sqlite3.connect("veri.db")
im = veritabani.cursor()
im.execute("CREATE TABLE IF NOT EXISTS arkadaslar(tckimlik TEXT, isim TEXT, soyad TEXT, cinsiyet TEXT, memleket TEXT, adresil TEXT, acikadres TEXT, telno TEXT)")


# Veritabanı Kayıt Fonksiyonu
def submit():
# db connect
veritabani = sqlite3.connect("veri.db")
im = veritabani.cursor()
veritabani.commit()


#tablo ekleme
im.execute("INSERT INTO arkadaslar VALUES:)tckimlik,:isim, :soyad, :cinsiyet, :memleket, :adresil, :acikadres, :telno)",
{
'tckimlik': tckimlik.get(),
'isim': isim.get(),
'soyad': soyad.get(),
'cinsiyet': cinsiyet.get(),
'memleket': memleket.get(),
'adresil': adresil.get(),
'acikadres': acikadres.get(),
'telno': telno.get(),


})




# clear text box
tckimlik.delete(0,END)
isim.delete(0, END)
soyad.delete(0, END)
cinsiyet.delete(0, END)
memleket.delete(0, END)
adresil.delete(0, END)
acikadres.delete(0, END)
telno.delete(0, END)

# Kaydet Butonu
submit_btn = tkinter.Button(pencere, bg="#363636", bd=5, activebackground="#e6c619", height=40, width=60,image=kaydetbuton, command=submit )
submit_btn.place(x=300,y=530)[/CODE]
 
Çözüm
Commit işlemini insert işleminden daha sonra yapmalısın diye tahmin ediyorum.

Ayrıca textbox'ta yazan veriyi direkt alıp bir insert kodu satırı oluşturduktan sonra ne olduğunu kontrol etmeden execute ettiğinden, burada sql injection var, bir kütüphane kullanıp, kütüphanenin kendi insert fonksiyonunu kullanmalısın.

Son olarak, veri tabanındaki tüm kolonları text yapmamalısın. Örneğin tckimlik ve telefon numaraları sayı olarak kaydedilmeli.
Commit işlemini insert işleminden daha sonra yapmalısın diye tahmin ediyorum.

Ayrıca textbox'ta yazan veriyi direkt alıp bir insert kodu satırı oluşturduktan sonra ne olduğunu kontrol etmeden execute ettiğinden, burada sql injection var, bir kütüphane kullanıp, kütüphanenin kendi insert fonksiyonunu kullanmalısın.

Son olarak, veri tabanındaki tüm kolonları text yapmamalısın. Örneğin tckimlik ve telefon numaraları sayı olarak kaydedilmeli.
 
Çözüm
Commit işlemini insert işleminden daha sonra yapmalısın diye tahmin ediyorum.

Ayrıca Textbox'ta yazan veriyi direkt alıp bir insert kodu satırı oluşturduktan sonra ne olduğunu kontrol etmeden execute ettiğinden, burada SQL injection var, bir kütüphane kullanıp, kütüphanenin kendi insert fonksiyonunu kullanmalısın.

Son olarak, veri tabanındaki tüm kolonları text yapmamalısın. Örneğin tckimlik ve telefon numaraları sayı olarak kaydedilmeli.

Merhaba commit i executeden sonra yapınca düzeldi. Kendi kişisel bilgisayarımda ve ağımda çalışacağı için SQL injection pek sıkıntı değil aslında ama açığı kapatsam çok daha iyi olur. Bu işlemi nasıl yapabilirim veya Google'da ne diye ararsam kaynak bulabilirim? Evet numara alanlarını int. Olarak güncelleyeceğim teşekkürler.
 

Geri
Yukarı