Python sqlite tarih ve saat kayıdı sonrası hesaplama sorunu

Selamlar

python sqlite ile hazırlamış olduğum tabloda,
istasyon numarası sıfır dan büyük olduğunda baslangıç zamanını ve istasyon numarsını yeni satıra insert etmesini,
istasyon numarası sıfır olduğunda ise insert edilen satıra bitiş zamanını update etmesini ve arada geçen süreyi yazdırmak için bayağı bir uğraş verdim fakat başaramadım.

Konu hakkında siz değerli üstatların desteğine ihtiyacım var.
Ekran Alıntısı

Öncelikle şunu belirteyim ki sizi destekliyorum.

Size bu şekilde yazılmış bir mesaj olsaydı siz nasıl bir destek sunabilirsiniz? Kodunuz yok, istasyon ne, nasil bir program yazıyorsunuz ve ne yapmaya çalışıyorsunuz? Bu bilgiler olmadan sadece sizi desteklediğimi söyleyebiliyorum maalesef.

3 Beğeni
if istasyon_numarasi > 0:
    son_id = yeni_satir(istasyon_numarasi, baslangic_zamani)
else:
    update_satir(son_id, gecen_sure)

Değerli üstatlarım. kod aşamasını belirli bir konuma getirdim.
baslangıç zamanını insert edip, bitiş zamanını ise update olacak şekilde kodu oluşturmaya çalıştım.
fakat bitiş zamanından başlangıç zamanını çıkarma işlemini bir türlü başaramadım. program hata veriyor.

                try:
                    saat1 = str(suanki_saat)
                    if UretimAdet_Goster == 1:
                        if dongubasla == 0:
                            saat2 = saat1
                            veritabani_cursor.execute("INSERT INTO hat_suruslari1 (baszamani, bitzamani, istasyon, aradakizaman) VALUES ('" + saat1 + "', '" + saat1 + "', 0, '0000-00-00 00:00:00')")
                            veritabani_baglanti.commit()
                            dongubasla = 1
                        saat3 = saat1 - saat2
                        veritabani_cursor.execute("UPDATE hat_suruslari1 SET bitzamani = '" + str(suanki_saat) + "', aradakizaman = '" + str(saat3) + "' WHERE baszamani = '" + str(saat2) + "'")
                        veritabani_baglanti.commit()
                    if UretimAdet_Goster == 0:
                        dongubasla = 0

                except:
                    print('deger yazilmadi')
                    pass

siz değerli ustaların yardımına ihtiyacım var

suanki_saat nedir bilmiyorum ama saat1 str, str'lerde cikartma islemi yok. (Veya varsa bile tarih cikartmasi yapmiyor.)

Aritmetigi query icinde de yapabilirsin: UPDATE tablo SET kolon3 = kolon1 - kolon2

Bir de veritabani sorgusu yaparken parameterized query kullanman lazim. Hangi database/kutuphane kullandigini bilmiyorum (bkz: Soru Sorarken Sıkça Düşülen Hatalar #6) ama veriyi sorgudan ayri yazmani saglayan mekanizma olmasi lazim: cursor.execute("UPDATE tablo SET kolon3 = kolon1 - ?", cikartilacak_deger)

Bunun bir guzelligi de, giden deger datetime gibi bir turse ve kutuphane yeterince akilliysa, query icinde DATE veya TIMESTAMP gibi esdeger bir ture donusebiliyor:

execute("SELECT ('" + str(dt) + "'::TIMESTAMP) + INTERVAL '1 DAY'")
yerine
execute("SELECT ? + INTERVAL '1 DAY'", dt)

1 Beğeni

üstadım desteğin için çok teşekkürler. Vermiş olduğun fikirler doğrultuda yazılımı revize ederek çalıştırmayı başardım.