====== LU06f - DAO-Klassen und Datenmodelle ====== DAO steht für "Data Access Object". Ein DAO ist ein Objekt, das eine Schnittstelle zu einer Datenbank bereitstellt. In Flask können DAO-Klassen verwendet werden, um die Logik für den Datenbankzugriff zu kapseln. Zusätzlich zu DAO-Klassen können Datenmodelle wie die ''ShoppingItem''-Klasse verwendet werden, um die Datenstruktur zu repräsentieren. ==== ShoppingItem-Klasse ==== Die ''ShoppingItem''-Klasse repräsentiert die Datenstruktur eines Einkaufsartikels. Sie enthält Attribute wie ''item_id'', ''item_name'' und ''quantity''. Anstatt manuell eine ''__init__''-Methode und andere spezielle Methoden zu schreiben, können wir die ''@dataclass''-Dekorator verwenden, um eine einfachere und sauberere Repräsentation unserer ''ShoppingItem''-Klasse zu erhalten. Dies ist besonders nützlich, wenn die Klasse hauptsächlich zur Speicherung von Daten verwendet wird. from dataclasses import dataclass @dataclass class ShoppingItem: item_id: int item_name: str quantity: int ==== Beispiel für eine DAO-Klasse ==== Nachfolgend finden Sie ein Beispiel für eine DAO-Klasse, die CRUD-Operationen (Create, Read, Update, Delete) für eine "shopping_items"-Tabelle durchführt und die ''ShoppingItem''-Klasse verwendet. class ShoppingItemDao: def __init__(self, db_file): self.conn = sqlite3.connect(db_file, check_same_thread=False) self.cursor = self.conn.cursor() def create_table(self): self.cursor.execute('''CREATE TABLE IF NOT EXISTS shopping_items (item_id INTEGER PRIMARY KEY, item_name TEXT, quantity INT)''') self.conn.commit() def add_item(self, item): self.cursor.execute("INSERT INTO shopping_items (item_name, quantity) VALUES (?, ?)", (item.item_name, item.quantity)) self.conn.commit() def get_item(self, item_id): self.cursor.execute("SELECT * FROM shopping_items WHERE item_id = ?", (item_id,)) row = self.cursor.fetchone() if row: return ShoppingItem(row[0], row[1], row[2]) return None def get_all_items(self): self.cursor.execute("SELECT * FROM shopping_items") rows = self.cursor.fetchall() return [ShoppingItem(row[0], row[1], row[2]) for row in rows] def update_item(self, item): self.cursor.execute("UPDATE shopping_items SET item_name = ?, quantity = ? WHERE item_id = ?", (item.item_name, item.quantity, item.item_id)) if self.cursor.rowcount > 0: self.conn.commit() return True return False def delete_item(self, item_id): self.cursor.execute("DELETE FROM shopping_items WHERE item_id = ?", (item_id,)) if self.cursor.rowcount > 0: self.conn.commit() return True return False def close(self): self.conn.close() ===== Beispiel zur Verwendung der ShoppingItemDao-Klasse ===== Nach der Definition der ''ShoppingItemDao''- und ''ShoppingItem''-Klassen können wir sie in unserem Code verwenden, um Einkaufsartikel in der Datenbank zu verwalten. # DAO-Instanz erstellen und Tabelle erstellen dao = ShoppingItemDao('shopping_example.db') dao.create_table() # Neuen Einkaufsartikel hinzufügen new_item = ShoppingItem(None, 'Apple', 5) dao.add_item(new_item) # Einkaufsartikel abrufen retrieved_item = dao.get_item(1) if retrieved_item: print(f"Item ID: {retrieved_item.item_id}, Item Name: {retrieved_item.item_name}, Quantity: {retrieved_item.quantity}") # Einkaufsartikel aktualisieren retrieved_item.quantity = 7 dao.update_item(retrieved_item) # Einkaufsartikel löschen dao.delete_item(1) # Verbindung schließen dao.close() ---- {{tag>M323-LU06}} [[https://creativecommons.org/licenses/by-nc-sa/4.0/ch/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] (c) Kevin Maurizi