Merhaba Arkadaşlar,
Kütüphane otomasyonu yapıyorum. Bir yerde takıldım. Aslında başka bir şekilde hallettim yapmak istediğimi. Sadece bilmek istiyorum bunun bir yöntemi var mı? Sorum şu:
Kütüphanedeki kitapları veritabanında tutuyorum ve her kitap kimler tarafından okunmuşsa okuyan kişileri veritabanında kitabın kaydının bulunduğu satırda “kimler_okudu” hücresinde tutmak istiyorum.
imlec.execute("""UPDATE kitaplar SET kimler_okudu=?, WHERE uye_no=?", (okuyan, uye_no,))
Bu şekilde yapınca hücredeki kayıt tamamen siliniyor. Benim istediğim o hücredeki verinin üzerine yazılsın. Sqlite datebase’de bunu yapacak bir fonksiyon var mı?
Amacınız ‘eklemek’ ise neden ‘güncelliyorsunuz’?. UPDATE deyimi var olan data’yı ‘günceller/değiştirir’. Yani aslında yapması gerekeni yapıyor. Data eklemek için INSERT INTO deyimini kullanmalısınız.
guzel dusunmussunuz.ama many to one iliskisiyle daha kolay hall edile bilir.ben sqlite3-de tam olarak nasil oluyor bilmiyorum.bilen varsa yardimci ola bilir.
kusura bakma many to many diyecegime many to one demisim.yani many to many olacak o.
ornegin suraya baka bilirsin:https://www.sqlite.org/lang_createtable.html
many to many su anlama geliyor: bir kitabin birden fazla okuyani ola bilir.ayni zamanda bir okuyanda birden fazla kitap okuya bilir.bu ilski ile iliskilendirilmis satirlara yeni bir sey eklendiginde eskisi silinmiyor,uzerine ekleniyor.eger yanlisim varsa duzeltin lutfen
Bunu array veya liste olarak tutuyorsun sanirim. (Database sorularinda tablonun/tablolarin yapisini (.schema komutu) verirsen cevaplamak daha kolay olur. Tablodan/tablolardan ornek data da fena olmaz.)
Bu durumda array’e bir eleman eklemek icin tamamini okuyup eleman eklenmis halini yazmak gerekir. Kimi database motorlarinda bunu yapmak icin bir fonksiyon olabilir fakat bildigim kadariyla SQL’de/SQLite’ta yok.
Bu arada normalizasyon konusunda yapilacak ilk is, database’i 1NF’ye sokmak, bu array’leri yardimci tablolara aktarmayla oluyor. Aktardiktan sonra kitap okuyan (yani array elemani) eklemek/cikartmak bu yeni tabloya bir INSERT/DELETE ile oluyor.
Yapiyi normalize bir halde tutup optimize bir sekilde sorgulama geregi yoksa SQL yerine veri yapilarini oldugu gibi okuyup yazan JSON veya pickle gibi formatlari/mekanizmalari tavsiye ederim.
Ben de o şekilde yaptım. Veriyi çektim ve yeni veriyi listede toplayıp satıra güncelledim. Bunun kolay bir yol var mıdır diye düşünmüştüm.
Görüşleriniz için çok teşekkürler. Sanırım bahsettiğim durum için kısa bir fonksiyon yok
kimler_okudu=kimler_okudu+?
Şeklinde yapabilirsin, aralarına virgül koymayı da unutmadan tabi .
Edit: bu sayısal kısımda işler, sözel veri için sql sözel birleşme concat() fonksiyonu ile.
kimler_okudu=concat(kimler_okudu,?)