Bildirimler
Tümünü temizle
Konu başlatıcı 07/10/2021 22:32
Yükleme
Yerel veritabani olusacaktir. Yaptiginiz islemler kaybolmaz!
Temel Gereksinimler:
1- Python!
2- Vakit
3- SQLite3 (Varsa DB Browser gayet kullanislidir)
4- PyQt5
Projeyi calistirma ve inceleme:
Projeyi calistirmak icin : python main.py
Projeyi Youtube de nasil Programladigimizi inceleyebilirsiniz! : Koddunyam.net
main.py:
# Import from window.arayuz import * from window.kitap_ekle import * from window.kitap_duzenle import * import veritabani import sys # Giris Ekrani app = QtWidgets.QApplication(sys.argv) MainWindow = QtWidgets.QMainWindow() ui = Ui_MainWindow() ui.setupUi(MainWindow) # Kitap Ekle MainWindow1 = QtWidgets.QMainWindow() ui1 = Ui_MainWindow1() ui1.setupUi(MainWindow1) # Kitap Düzenle MainWindow2 = QtWidgets.QMainWindow() ui2 = Ui_MainWindow2() ui2.setupUi(MainWindow2) def tablo_guncelle(): """ Veritabani icerisindeki bilgileri PyQT Tablosuna aktaran fonksiyon. """ ui.table_Icerik.clear() ui.table_Icerik.setHorizontalHeaderLabels(('ID','KitapAdi','SayfaSayisi','YazarAdi','Kategori','Raf')) icerik = veritabani.tablo_icerikleri_dondur() for satir, satir_veri in enumerate(icerik): for sutun, sutun_veri in enumerate(satir_veri): ui.table_Icerik.setItem(satir, sutun, QtWidgets.QTableWidgetItem(str(sutun_veri))) print("[+] Veriler güncellendi ve Tablo icerisine yazdirildi.") def kitap_Ara(): """ Veritabani icerisinde olan kitabi arar. """ kitap_Adi = ui.line_Ara.text() kitap_Adi = veritabani.secure_params(kitap_Adi) if kitap_Adi == "": tablo_guncelle() else: ui.table_Icerik.clear() ui.table_Icerik.setHorizontalHeaderLabels(('ID', 'KitapAdi', 'SayfaSayisi', 'YazarAdi', 'Kategori', 'Raf')) arama = veritabani.tablo_icinde_Ara(kitap_Adi) for satir, satir_veri in enumerate(arama): for sutun, sutun_veri in enumerate(satir_veri): ui.table_Icerik.setItem(satir, sutun, QtWidgets.QTableWidgetItem(str(sutun_veri))) def kitap_Ekle_Arayuz(): """ Kitap Ekle Arayüzünün acilmasini saglayan fonksiyon. """ MainWindow1.show() def kitap_Ekle(): """ Veritabani icerisine yeni Kitap bilgisi ekleyen fonksiyon. """ kitap_adi = ui1.line_Kitap_Adi.text() sayfa_sayisi = ui1.line_Sayfa_Sayisi.text() yazar_adi = ui1.line_Yazar_Adi.text() kategori = ui1.combo_Kategori.currentText() raf = ui1.line_Raf.text() veritabani.tablo_Kitap_Ekle(kitap_adi, sayfa_sayisi, yazar_adi, kategori, raf) print("Kitap Ekleme Basarili!") tablo_guncelle() def kitap_Duzenle_Arayuz(): """ Kitap Düzenle Arayüzüne tablo icerisinden bilgileri gönderen fonksiyon. """ try: MainWindow2.show() index = ui.table_Icerik.currentIndex() veri = ui.table_Icerik.model().index(index.row(), 0) id = int(ui.table_Icerik.model().data(veri)) imlec = veritabani.tablo_icerik_duzenle(id) for icerik in imlec: kitap_Adi = icerik[0] sayfa_Sayisi = icerik[1] yazar_Adi = icerik[2] kategori = icerik[3] raf = icerik[4] ui2.line_Kitap_adi.setText(kitap_Adi) ui2.line_Sayfa_Sayisi.setText(str(sayfa_Sayisi)) ui2.line_Yazar_Adi.setText(yazar_Adi) ui2.line_Raf.setText(raf) ui2.combo_Kategori.findText(kategori) except: soru = QtWidgets.QMessageBox.question(MainWindow, "HATA!", "Lütfen Tablo icerisinden bir kitap seciniz!", \ QtWidgets.QMessageBox.Ok) if soru == QtWidgets.QMessageBox.Ok: MainWindow.show() MainWindow2.close() def kitap_Duzenle(): """ Veritabani icerisinden Tabloda secili olan Kitap Bilgisini düzenleyen fonksiyon. """ index = ui.table_Icerik.currentIndex() veri = ui.table_Icerik.model().index(index.row(), 0) id = int(ui.table_Icerik.model().data(veri)) kitap_Adi = ui2.line_Kitap_adi.text() sayfa_Sayisi = int(ui2.line_Sayfa_Sayisi.text()) yazar_Adi = ui2.line_Yazar_Adi.text() raf = ui2.line_Raf.text() kategori = ui2.combo_Kategori.currentText() veritabani.tablo_Kitap_Guncelle(id, kitap_Adi, sayfa_Sayisi, yazar_Adi, kategori, raf) tablo_guncelle() MainWindow2.close() def kitap_Sil(): """ Veritabani icerisinden Tabloda secili olan Kitap Bilgisini silen fonksiyon. """ index = ui.table_Icerik.currentIndex() veri = ui.table_Icerik.model().index(index.row(), 0) id = int(ui.table_Icerik.model().data(veri)) veritabani.tablo_Bilgileri_Sil(id) tablo_guncelle() def cikis(): """ Cikis yapilsin mi sorgusunu yapan fonksiyon. """ soru = QtWidgets.QMessageBox.question(MainWindow, "Emin misiniz?", "Programdan cikmak istediginize emin misiniz?", \ QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No) if soru == QtWidgets.QMessageBox.Yes: sys.exit(app.exec_()) else: MainWindow.show() def iptal_Duzenle(): """ Kitap Düzenle Arayüzünü kapatan fonksiyon. """ MainWindow2.close() def iptal_Ekle(): """ Kitap Ekle Arayüzünü kapatan fonksiyon. """ MainWindow1.close() # Arayuz Objeleri Baglama # Temel Arayuz ui.btn_Form_Duzenle.clicked.connect(kitap_Duzenle_Arayuz) ui.btn_Ara.clicked.connect(kitap_Ara) ui.line_Ara.returnPressed.connect(kitap_Ara) ui.btn_Form_Ekle.clicked.connect(kitap_Ekle_Arayuz) ui.btn_Cikis_Main.clicked.connect(cikis) ui.btn_Kitap_Sil.clicked.connect(kitap_Sil) # Kitap Düzenle ui2.btn_Iptal_Duzenle.clicked.connect(iptal_Duzenle) ui2.btn_Duzenle.clicked.connect(kitap_Duzenle) # Kitap Ekle ui1.btn_Kitap_Ekle.clicked.connect(kitap_Ekle) ui1.btn_Iptal_Ekle.clicked.connect(iptal_Ekle) # Start veritabani.tablo_Olustur() MainWindow.show() tablo_guncelle() sys.exit(app.exec_())
veritabanı.py:
import sqlite3 veritabani = "test.db" # DataBase baglan = sqlite3.connect(veritabani) imlec = baglan.cursor() def tablo_Olustur(): """ SQLite3 Veritabani olusturan fonksiyondur. """ try: imlec.execute("CREATE TABLE IF NOT EXISTS kitaplar (ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, \ KITAPADI TEXT NOT NULL,\ SAYFASAYISI INTEGER NOT NULL, \ YAZARADI TEXT, \ KATEGORI TEXT, \ RAF TEXT NOT NULL)") baglan.commit() print("[!] TABLO OLUSTURULDU!") except: print("[-] HATA!!! TABLO OLUSTUR Fonksiyonu TABLO OLUSTURAMADI!") def tablo_Kitap_Ekle(kitap_adi:str, sayfa_sayisi:int, yazar_adi:str, kategori:str, raf:str): """ SQLite3 Veritabani Tablosuna Bilgi ekleyen fonksiyon. """ imlec.execute(f"INSERT INTO kitaplar (KITAPADI, SAYFASAYISI, YAZARADI, KATEGORI, RAF) VALUES (?, ?, ?, ?, ?)", (kitap_adi, sayfa_sayisi, yazar_adi, kategori, raf,)) baglan.commit() def tablo_Kitap_Guncelle(id:int, kitap_adi:str, sayfa_sayisi:int, yazar_adi:str, kategori:str, raf:str): """ SQLite3 Veritabani Tablosunda bulunan bilgiyi düzenleyen fonksiyon. """ imlec.execute(f"UPDATE kitaplar SET KITAPADI = '{kitap_adi}', SAYFASAYISI = {sayfa_sayisi}, YAZARADI = '{yazar_adi}', KATEGORI = '{kategori}', RAF = '{raf}' WHERE ID = {id}") baglan.commit() def tablo_Bilgileri_Oku(): """ SQLite3 Veritabani icerisindeki bilgileri okur! """ bilgiler = imlec.execute("SELECT KITAPADI, SAYFASAYISI, YAZARADI, KATEGORI, RAF from kitaplar") for satir in bilgiler: kitapadi = satir[0] SayfaSayisi = satir[1] YazarAdi = satir[2] Kategori = satir[3] Raf = satir[4] def tablo_Bilgileri_Sil(id:int): """ SQLite3 Veritabani icerisindeki bilgileri siler!""" imlec.execute(f"DELETE FROM kitaplar where ID={id}") baglan.commit() def tablo_Sil(tablo_adi): """ SQLite3 Veritabanindaki Tabloyu siler! """ imlec.execute(f"DROP TABLE IF EXISTS {tablo_adi}") baglan.commit() def tablo_icinde_Ara(kitap_Adi): """ SQLite3 Veritabani icerisinde belirli Kitap Adini arayan fonksiyon. """ islem = imlec.execute(f"SELECT ID, KITAPADI, SAYFASAYISI, YAZARADI, KATEGORI, RAF from kitaplar where KITAPADI = '{kitap_Adi}'") return islem def tablo_icerik_duzenle(id:int): """ SQLite3 Veritabani icerisinde belirli icerikleri düzenlemek icin kullanilan SQL Komutu. """ icerik = imlec.execute(f"SELECT KITAPADI,SAYFASAYISI,YAZARADI,KATEGORI,RAF from kitaplar where ID= {id}") return icerik def tablo_icerikleri_dondur(): """ SQLite3 icerisindeki tüm iceriklerin ciktisini veren fonksiyon. """ icerik = imlec.execute("SELECT ID,KITAPADI,SAYFASAYISI,YAZARADI,KATEGORI,RAF from kitaplar") return icerik def secure_params(currenparam): return currenparam.replace("\"","").replace("'","")
Arayüz için : https://github.com/Saizzou/Koddunyam_Python_Kutuphane/tree/main/window adressini kullanabilirsiniz!
Secure_Params fonksiyonu SQL injection engellemesi içindir!
Koddunyam.net %100 ücretsiz bir bilgi paylasim sitesidir! Bilgiyi paylasmak istemeyenler ve kendine saklamak isteyenlerin yeri kesinlikle burasi degildir.