Iki fonksiyonu aynı satır için kullanma sorunu


#1

Merhaba. İki fonksiyon tek başına çalışıyor, ama ikisini birden kullandığımda, yalnızca birisi çalışıyor, diğeri için bir alt satıra geçiyor. Biri tabloya değer ekleme, diğeri update için.

def kaydet():
    im.execute("INSERT INTO ana(algi,nesne,eylem) VALUES(?,?,?)",
               (e1.get(),e2.get(),e3.get()))

kaydet()

def azalma():
    im.execute("update ana set water = water -1, food = food -1, love = love -1 where no=(select max(no) from ana)")

azalma()

vt.commit()

istediğim; aynı satırda üç string kolona değer girip, üç integer kolonun değerlerini güncellemek.
İkiişlemi tek fonksiyon olarak çalıştırmayı başaramadım.
Yardım lütfen, teşekkürler.


#2

Yani bu verdiğiniz kod mu düzgün çalışmıyor?


#3

İlginiz için teşekkürler ismail bey. Kodlar düzgün çalışıyor. Ama sanırım sqlite’de bir defada yalnızca birisi uygulanabiliyor. yani aynı satırda hem insert, hem de update yapılamıyor. Hatta aynı satırda bir fonksiyon ile üç kolona insert, bir başka fonksiyon ile başka üç kolona insert yapılamıyor, bir alt satıra geçiyor. Buna karşı bir fonksiyon içinde diğer fonksiyonu çağırmayı denemek istedim, başaramadım.

Aslında istediğim, id kolonu(no) bir artarken, üç int. kolonun değerlerinin birer azalması. Aynı satırda bazı str. kolonlara da yeni değer girmek istiyorum. Yukarıdaki fonksiyonlardan biri çalıştığında, üç kolona giriş yapılıyor, ama diğer kolonlar Null değeri alıyor ve ikinci fonksiyon için bir alt satıra geçiliyor. Bu yüzden fonksiyonlardan birini insert değil de update yapmayı denedim, gene olmadı.

Sqlite’de bu mümkün değil mi? Mümkün ise, nasıl yapabilirim? Ayrıca, iki fonksiyonu birleştirerek birinin içinde diğerini nasıl çağırabilirim? Sorularım bunlar. Tekrar teşekkürler.


#4

Sorunu çözdüm. Kaydet fonksiyonu içinde bütün insertleri kullanmayı başardım. İlginiz için Teşekkürler.


#5

Nasıl yaptığınızı paylaşabilir misiniz?


#6

Elbette.

def kaydet():
    
    im.execute("select water from ana where no=(select max(no) from ana)")
    a1 = im.fetchall()
    for i in a1:
        ee4 = int(i[0])
                
    im.execute("select food from ana where no=(select max(no) from ana)")
    a2= im.fetchall()
    for i in a2:
        ee5 = int(i[0])
       
    im.execute("select love from ana where no=(select max(no) from ana)")
    a3= im.fetchall()
    for i in a3:
        ee6 = int(i[0])
        #yukarıdaki kodlar son satırdaki üç kolonu alıp değerlerini int() yapıyor   

    if ee4 < 50:
        im.execute("insert into ana(algi,nesne,eylem,water,food,love,bilge) values (?,?,?,?,?,?,?)",
        (e1.get(),e2.get(),e3.get(),ee4,ee5,ee6,'su ver',))
                    
    elif ee5 < 50:
        im.execute("insert into ana(algi,nesne,eylem,water,food,love,bilge) values (?,?,?,?,?,?,?)",
        (e1.get(),e2.get(),e3.get(),ee4,ee5,ee6,'yemek ver',))
    elif ee6 < 50:
        im.execute("insert into ana(algi,nesne,eylem,water,food,love,bilge) values (?,?,?,?,?,?,?)",
        (e1.get(),e2.get(),e3.get(),ee4,ee5,ee6,'beni sev',))
    else:
        im.execute("insert into ana(algi,nesne,eylem,water,food,love,bilge) values (?,?,?,?,?,?,?)",
        (e1.get(),e2.get(),e3.get(),ee4,ee5,ee6,'',))
        #koşullu ifadeler int. kolonların değerine göre son kolona değer yazıyor.
        #e1.get(),... ifadeleri entry alanlarını ifade ediyor
    im.execute("""update ana set water = water -1, food = food -1, love = love -1 where
               no=(select max(no) from ana)""")
        #son satırdaki değerler bir eksiltiliyor.
    vt.commit()

Tabii her çözüm yeni sorunlara kapı açıyor, sıradaki sorunu çözmeye çalışıyorum şimdi.