Team Ai
Apppublic

frday/framework-dss

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
database.py159 linesDownload Raw Back to data
1import sqlite32 3class Database:4    def __init__(self, db_name="dss_framework.db"):5        self.conn = sqlite3.connect(db_name, check_same_thread=False)6        self.cursor = self.conn.cursor()7        self.create_tables()8 9    def create_tables(self):10        # Tabel untuk menyimpan prediksi11        self.cursor.execute("""12            CREATE TABLE IF NOT EXISTS prediksi (13                id INTEGER PRIMARY KEY AUTOINCREMENT,14                nama TEXT,15                metode TEXT16            )17        """)18        19        # Tabel untuk menyimpan kriteria20        self.cursor.execute("""21            CREATE TABLE IF NOT EXISTS kriteria (22                id INTEGER PRIMARY KEY AUTOINCREMENT,23                prediksi_id INTEGER,24                nama TEXT,25                tipe TEXT,26                bobot REAL,27                FOREIGN KEY(prediksi_id) REFERENCES prediksi(id)28            )29        """)30 31        # Tabel untuk menyimpan alternatif32        self.cursor.execute("""33            CREATE TABLE IF NOT EXISTS alternatif (34                id INTEGER PRIMARY KEY AUTOINCREMENT,35                prediksi_id INTEGER,36                nama TEXT,37                FOREIGN KEY(prediksi_id) REFERENCES prediksi(id)38            )39        """)40 41        # Tabel untuk menyimpan nilai alternatif terhadap kriteria42        self.cursor.execute("""43            CREATE TABLE IF NOT EXISTS nilai_alternatif (44                id INTEGER PRIMARY KEY AUTOINCREMENT,45                alternatif_id INTEGER,46                kriteria_id INTEGER,47                nilai REAL,48                FOREIGN KEY(alternatif_id) REFERENCES alternatif(id),49                FOREIGN KEY(kriteria_id) REFERENCES kriteria(id)50            )51        """)52 53         # Tabel untuk menyimpan hasil prediksi54        self.cursor.execute("""55            CREATE TABLE IF NOT EXISTS hasil_prediksi (56                id INTEGER PRIMARY KEY AUTOINCREMENT,57                prediksi_id INTEGER,58                alternatif_id INTEGER,59                skor REAL,60                FOREIGN KEY(prediksi_id) REFERENCES prediksi(id),61                FOREIGN KEY(alternatif_id) REFERENCES alternatif(id)62            )63        """)64        self.conn.commit()65 66    def simpan_prediksi(self, nama_prediksi, metode):67        self.cursor.execute("INSERT INTO prediksi (nama, metode) VALUES (?, ?)", (nama_prediksi, metode))68        self.conn.commit()69        return self.cursor.lastrowid70 71    def simpan_kriteria(self, prediksi_id, nama, tipe, bobot):72        self.cursor.execute("INSERT INTO kriteria (prediksi_id, nama, tipe, bobot) VALUES (?, ?, ?, ?)",73                            (prediksi_id, nama, tipe, bobot))74        self.conn.commit()75        return self.cursor.lastrowid76 77    def simpan_alternatif(self, prediksi_id, nama):78        self.cursor.execute("INSERT INTO alternatif (prediksi_id, nama) VALUES (?, ?)", (prediksi_id, nama))79        self.conn.commit()80        return self.cursor.lastrowid81 82    def simpan_nilai_alternatif(self, alternatif_id, kriteria_id, nilai):83        self.cursor.execute("INSERT INTO nilai_alternatif (alternatif_id, kriteria_id, nilai) VALUES (?, ?, ?)",84                            (alternatif_id, kriteria_id, nilai))85        self.conn.commit() 86 87    def simpan_hasil(self, prediksi_id, alternatif_id, skor):88        self.cursor.execute("INSERT INTO hasil_prediksi (prediksi_id, alternatif_id, skor) VALUES (?, ?, ?)",89                            (prediksi_id, alternatif_id, skor))90        self.conn.commit() 91 92    def ambil_prediksi(self):93        self.cursor.execute("SELECT * FROM prediksi")94        return self.cursor.fetchall()95        96    def ambil_alternatif_id(self, prediksi_id, nama_alternatif):97        self.cursor.execute("SELECT id FROM alternatif WHERE prediksi_id = ? AND nama = ?", (prediksi_id, nama_alternatif))98        result = self.cursor.fetchone()99        return result[0] if result else None100 101    def ambil_prediksi_keyword(self, keyword):102        query = "SELECT * FROM prediksi WHERE nama LIKE ?"103        self.cursor.execute(query, ('%' + keyword + '%',))104        hasil = self.cursor.fetchall()105        return hasil106 107    def ambil_data_tabel(self, tabel, prediksi_id):108        if tabel == "nilai_alternatif":109            query = """110            SELECT 111                a.nama AS nama_alternatif, 112                k.nama AS nama_kriteria, 113                na.nilai114            FROM alternatif a115            JOIN nilai_alternatif na ON a.id = na.alternatif_id116            JOIN kriteria k ON na.kriteria_id = k.id117            WHERE a.prediksi_id = ? 118            ORDER BY a.nama, k.nama119            """120        elif tabel == "hasil_prediksi":121            query = """122            SELECT a.nama AS Alternatif, h.skor AS Skor123            FROM hasil_prediksi h124            JOIN alternatif a ON h.alternatif_id = a.id125            WHERE h.prediksi_id = ?126            ORDER BY h.skor DESC127            """128        else:129            query = f"SELECT * FROM {tabel} WHERE prediksi_id = ?"130        self.cursor.execute(query, (prediksi_id,))131        return self.cursor.fetchall()132 133    def ambil_data_prediksi(self, prediksi_id):134        # Mengambil data prediksi135        query_prediksi = "SELECT * FROM prediksi WHERE id = ?"136        self.cursor.execute(query_prediksi, (prediksi_id,))137        prediksi = self.cursor.fetchone()138 139        # Mengambil data kriteria140        kriteria = self.ambil_data_tabel("kriteria", prediksi_id)141 142        # Mengambil data alternatif143        alternatif = self.ambil_data_tabel("alternatif", prediksi_id)144 145        # Mengambil data nilai alternatif146        nilai_alternatif = self.ambil_data_tabel("nilai_alternatif", prediksi_id)147 148        # Mengorganisir data ke dalam format yang diinginkan149        data_prediksi = {150            'nama_prediksi': prediksi[1],151            'metode': prediksi[2],152            'kriteria': [k[2] for k in kriteria],153            'bobot': [k[4] for k in kriteria],154            'tipe_kriteria': [k[3] for k in kriteria],155            'alternatif': [a[2] for a in alternatif],156            'matrix': [[n[2] for n in nilai_alternatif if n[0] == a[0]] for a in alternatif]157        }158 159        return data_prediksi