Python ile SQLite Veritabanına Kayıt İçin SQL INSERT Ekleme Sorgusu Dışında Yöntemler Neler

Merhaba
Python ile SQLite Veritabanına Kayıt İçin QT Designer Arayüzü kullanarak kayıt yapmaya çalışıyorum. Fakat SQL INSERT Ekleme Sorgusu ile Tabloya kayıt eklemeyi başaramadım. Program hata vermiyor CREATE sorgusu çalışıyor alanlar ekleniyor fakat INSERT çalışmadığı için kayıtlar eklenmiyor. Hata da vermediği için sorunu çözemedim. Ekleme sorgusu dışında kayıt eklemek için kullanılan yöntemleri öğrenebileceğim kaynaklar nelerdir. Bilgi vermenizi rica ederim.

# --------------------KUTUPHANELER--------------------
# ----------------------------------------------------
import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon
from StudentUI import *

# --------------------UYGULAMA OLUŞTUR----------------
# ----------------------------------------------------

uygulama = QApplication(sys.argv)
penStudentForm = QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(penStudentForm)
penStudentForm.show()

# ------------------VERITABANI OLUŞTUR----------------
# ----------------------------------------------------
import sqlite3

global conn
global curs

conn = sqlite3.connect('Student_YS.db')
curs = conn.cursor()

srgCreateTblStudent = ('CREATE TABLE IF NOT EXISTS student(                                                            \
                         Id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,                                                \
                         AdSoyad TEXT NOT NULL,                                                                        \
                         OkulNo TEXT NOT NULL,                                                                         \
                         Sube TEXT NOT NULL,                                                                           \
                         Burslu TEXT NOT NULL,                                                                         \
                         YabanciDil TEXT NOT NULL,                                                                     \
                         DogumTarihi TEXT NOT NULL,                                                                    \
                         KayitTarihi TEXT NOT NULL                                                                     \
                         )')
curs.execute(srgCreateTblStudent)
conn.commit()
# -----------------------KAYDET-----------------------
# ----------------------------------------------------

def EKLE():


    _led_AdSoyad = ui.led_AdSoyad.text()
    _led_OkulNo = ui.led_OkulNo.text()
    _cob_Sube = ui.cob_Sube.currentText()
    _dat_DogumTarihi = ui.dat_DogumTarihi.setCalendar(QCalendarWidget.selectedDate().toString(QtCore.Qt.ISODate))
    _dte_KayitTarihi = ui.dte_KayitTarihi.setCalendar(QCalendarWidget.selectedDate().toString(QtCore.Qt.ISODate))
    if ui.chb_Burslu.isChecked():
        _chb_Burslu = "Yes"
    else:
        _chb_Burslu = "No"
    _lsw_YabanciDil = ui.lsw_YabanciDil.currentItem().text()

    curs.execute("INSERT INTO student                                                                                  \
                          (AdSoyad, OkulNo, Sube, DogumTarihi, KayitTarihi, Burslu, YabanciDil)                        \
                           VALUES (?,?,?,?,?,?,?)",                                                                    \
                           (_led_AdSoyad, _led_OkulNo, _cob_Sube, _dat_DogumTarihi, _dte_KayitTarihi,                  \
                           _chb_Burslu, _lsw_YabanciDil))
    conn.commit()

# ------------------SIGNAL SLOT-----------------------
# ----------------------------------------------------

ui.btn_Kaydet.clicked.connect(EKLE)

sys.exit(uygulama.exec_())

abi kayıt yapılması için buton oluştur belki işe yarar

Konunun PyQT ve Python ile alakasi yok. Internetten Sqlite SQL olarak arastirabilirsiniz.

var zaten kodun en altına bak btn_Kaydet

Merhaba,

Birbirinden tamamen alakasiz iki soruyu ayni paragrafta sormussun.

SQLite sorgu arayuzunden kullanildigi icin sorgu yapmadan kayit eklemek hayal / genel kultur / sanat diyarlarina giriyor. Database dosyasini elle editleyebilirsin, veya baskasina yollayip sorguyu onun calistirmasini isteyebilirsin.

Peki sorgunun yapildigi satir calistiriliyor mu? Kayit eklemediginden emin misin, nasil bakiyorsun?

Aradaki katmanlarin hata vermeden sessizce calismayacagina inanmak zor.

Kodu butun gereksiz Qt seylerinden arindirip 3-4 satira indirip test ettin mi? Etmediysen sirada o var.

1 Beğeni

Sn @aib Kod çalıştıktan sonra SQLite da dosya oluşuyor Resimlerden de anlaşıldığı üzere sütün adlarıda eklenmiş ama kayıt yok. Dediğiniz gibi QT ara yüzünden değil de Terminalden kodu çalıştırıp sorgunun sonucuna bakayım. Teşekkür ederim.

Merhaba,

Aşağıdaki kod parçasını

şu şekilde değiştirin bir daha deneyin.

curs.execute(
    "INSERT INTO student VALUES(?,?,?,?,?,?,?)",
    (
        _led_AdSoyad, 
        _led_OkulNo, 
        _cob_Sube, 
        _dat_DogumTarihi, 
        _dte_KayitTarihi, 
        _chb_Burslu, 
        _lsw_YabanciDil
    )
)

Buradaki soru işaretleri zaten sütun isimlerini temsil ediyor, siz hem bu soru işaretlerini hem de sütun isimlerini aynı anda kullanıyorsunuz. Gerçi SQL ifadesinin söz diziminde de bir hata var. Sütun isimleri VALUES() parantez içine yazılmalıydı.

Eğitim videosundaki hocanın kodlarını kendi projeme birebir uyarladım Söz dizimleri vs hoca nasıl yazdıysa benimki de aynı en azından ben şimdiye kadar kodlarda bir fark veya bir yanlışımı bulamadım. Ama hocanın kodu 2.denemesinde çalıştı ben hala klavyeyi parçalıyorum:)

Hmm, sizin paylaştığınız ilk kullanımın da geçerli olduğunu bilmiyordum. Ben genelde sizinle paylaştığım ikinci ifadeyi kullanıyordum. Ve sizin kullandığınız ifadenin hata üreteceğini düşündüm, yanılmışım.

Keşke yanılmasaydınız:)

Peki, EKLE fonksiyonunun içine, curs ve conn ile işlem yapmadan önce global curs, conn yazınca nasıl bir sonuç alıyorsunuz?

Hatta, şöyle de yapmayı deneyebilirsiniz. global curs ve global conn ifadelerini kaldırın.
EKLE fonksiyonuna curs ve conn isminde iki tane parametre yazın (Yani şöyle: def EKLE(conn, curs):). Sonra da btn_kaydet ile ilgili olan satırı da aşağıda gösterildiği şekilde değiştirin ve bir daha deneyin.

ui.btn_Kaydet.clicked.connect(lambda: EKLE(conn, curs))

Bu iki yöntemi de deneyin isterseniz.

Klavyenin başına yeni oturdum Sn@aib in dene dediği olayı test edip sonra sizin önerinizi deneyeceğim. Video eğitimini veren hoca Amerika’da ona bile mail attım. Hocam kurtarın beni diye :smiley:

Yine de global değişkenler üzerinde bir işlem yapmadığınız için fonksiyonun içindeki conn ve curs değişkenleriyle işlem yapabiliyor olmanız gerekiyor. Çünkü bunlar önceden tanımlanmış. Sorun belki de fonksiyonun çağrılmıyor olması olabilir mi? Yani isterseniz EKLE fonksiyonuna bir print fonksiyonu yerleştirin ve bu print fonksiyonuna yazdığınız yazının standart çıktıya yazdırılıp yazdırılmadığını bir kontrol edin.

Yok, kolonlar soluna, degerler sagina.

Sorguda veya etrafindaki kodda bir hata goremiyorum ama tabi oturup ? sayisini filan saymadim. Qt vs. ile ugrasmak gerekmeseydi dogrudan kendi bilgisayarimda denerdim, hatta son oneriyi o yuzden yaptim.

Yazdığım mesajdan sonra, o sorgu biçimini kullanarak ben de ufak bir deneme yaptım ve çalıştı, yanıldığımı da öyle anladım. :blush:

? sayiları doğru kontrol ettim

Siz bir de o EKLE fonksiyonunun içine bir tane print fonksiyonu ekleyin ve EKLE fonksiyonunu çağıran düğmeye bastığınızda, bu print fonksiyonuna yazacağınız karakterlerin ekrana yazdırılıp yazdırılmadığına bir bakın.

Aynen. Sundan kastim oydu:

Tesekkurler.

Mesela. Kolon sayisi, VALUES’daki A harfinin gercekten A yerine Α olmasi filan gibi bir suru gormesi zor durumlar var. O yuzden kodu calistirip hatalara bakmak en temizi.

1 Beğeni

@aib Söylediğinizi yaptım Sorguyu QT Designer zımbırtılarından temizledim Ve Ekleme sorgusu çalışarak tabloya kayıt yaptı.


Şimdi gerçekten beynim yandı sorguyu yanlış yazmışımdır diye düşünüyordum çok fazla veri var bir yeri kaçırmışımdır diye o hipotezimde böylece çürümüş oldu. Kodun kalanı zaten 4-5 küçük import satırından ve değişkenlerden oluşuyor onlarda da hatam yok video dersindekiyle aynı hiç bir fark yok. Şimdi @dildeolupbiten in söylediklerini uygulayacağım bakalım sonuç ne olacak
Çalışan sorgu

import sqlite3

vt = sqlite3.connect('vt.db')
im = vt.cursor()
im.execute("""CREATE TABLE IF NOT EXISTS uye(                                                                          \
                   Id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,                                                      \
                   Durum TEXT NOT NULL,                                                                                \
                   UyeNo TEXT NOT NULL UNIQUE,                                                                         \
                   AdiSoyadi TEXT NOT NULL,                                                                            \
                   TcNo TEXT NOT NULL UNIQUE,                                                                          \
                   Tabiyeti TEXT NOT NULL,                                                                             \
                   DogumTarihi TEXT NOT NULL,                                                                          \
                   DogumYeri TEXT NOT NULL,                                                                            \
                   AnaAdi TEXT NOT NULL,                                                                               \
                   BabaAdi TEXT NOT NULL,                                                                              \
                   Meslegi TEXT NOT NULL,                                                                              \
                   OgrenimDurumu TEXT NOT NULL,                                                                        \
                   SosyalGuvencesi TEXT NOT NULL,                                                                      \
                   KabulTarihi TEXT NOT NULL,                                                                          \
                   KabulKararNo TEXT NOT NULL,                                                                         \
                   IptalTarihi TEXT,                                                                                   \
                   IptalKararNo TEXT,                                                                                  \
                   IptalNedeni TEXT,                                                                                   \
                   CepNo_1 TEXT NOT NULL,                                                                              \
                   CepNo_2 TEXT,                                                                                       \
                   IrtibatNo TEXT,                                                                                     \
                   Ilce TEXT NOT NULL,                                                                                 \
                   Sehir TEXT NOT NULL,                                                                                \
                   E_Mail TEXT,                                                                                        \
                   Aciklama TEXT,                                                                                      \
                   Adress TEXT NOT NULL,                                                                               \
                   AkuluAraba TEXT ,                                                                                   \
                   TekerlekliSandalye TEXT,                                                                            \
                   KanadyenBaston TEXT,                                                                                \
                   Yurutec TEXT,                                                                                       \
                   Protez TEXT,                                                                                        \
                   Ortez TEXT,                                                                                         \
                   KanGrubu TEXT NOT NULL,                                                                             \
                   EngelNedeni TEXT,                                                                                   \
                   EngelYuzdesi TEXT,                                                                                  \
                   IlgilendigiSporlar TEXT)""")

im.execute("""INSERT INTO uye                                                                                          \
        (Durum, UyeNo, AdiSoyadi, TcNo, Tabiyeti, DogumTarihi, DogumYeri, AnaAdi, BabaAdi, Meslegi,                    \
        OgrenimDurumu, SosyalGuvencesi, KabulTarihi, KabulKararNo, IptalTarihi, IptalKararNo, IptalNedeni,             \
        CepNo_1, CepNo_2, IrtibatNo, Ilce, Sehir, E_Mail, Aciklama, Adress, AkuluAraba, TekerlekliSandalye,            \
        KanadyenBaston, Yurutec, Protez, Ortez, KanGrubu, EngelNedeni, EngelYuzdesi, IlgilendigiSporlar )              \
        VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)""",
           ('Aktif', '244', 'Oguz Turkyilmaz', '11410143768', 'TC', '17.05.1968', 'Ankara', 'Ayten', 'Mustafa', 'Terzi',
            'Lise', 'SSK', '18.10.1980', '123456', '22.09.2003', '987654', 'Vefat', '5459085788', '5536906594',
            '2423169670', 'Konyaalti', 'Antalya', 'info@gmail.com', 'Buraya Aciklama Yazilacak', 'Acik Adres Yazilacak',
            'VAR', 'YOK', 'YOK', 'VAR', 'YOK', 'VAR', 'A RH POZITIF', 'Trafik Kazasi', '75', 'Futbol'
            ))
vt.commit()

@dildeolupbiten Fonksiyonun icine yazdigim print fonksiyonu calismadi. Ekrana "DEF FONKSIYONU CALISIYOR " ibaresi basilmadi.