From b7c3b58157970e62ca71c3e1b7181ce5da8392b5 Mon Sep 17 00:00:00 2001 From: Andreas Knuth Date: Mon, 2 Dec 2024 21:50:44 +0100 Subject: [PATCH] clean_db_entries --- deck_endpoints.py | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/deck_endpoints.py b/deck_endpoints.py index 9178260..27cb007 100644 --- a/deck_endpoints.py +++ b/deck_endpoints.py @@ -77,6 +77,51 @@ def clean_debug_directories(): logger.info("Bereinigung der Debug-Verzeichnisse abgeschlossen.") +def clean_db_entries(): + """ + Löscht alle Einträge aus der Deck-Tabelle, für die es kein entsprechendes Verzeichnis unter 'debug_images' gibt. + """ + debug_base_dir = 'debug_images' + if not os.path.exists(debug_base_dir): + logger.info(f"Debug-Verzeichnis '{debug_base_dir}' existiert nicht. Keine DB-Einträge zu bereinigen.") + return + + try: + # Liste der vorhandenen Verzeichnisse unter 'debug_images' + existing_dirs = {name for name in os.listdir(debug_base_dir) + if os.path.isdir(os.path.join(debug_base_dir, name))} + except Exception as e: + logger.error(f"Fehler beim Zugriff auf Verzeichnisse in '{debug_base_dir}': {e}") + return + + try: + conn = get_db_connection() + conn.row_factory = sqlite3.Row + cursor = conn.cursor() + + # Alle bildid-Werte aus der Deck-Tabelle abrufen, die nicht NULL sind + cursor.execute('SELECT DISTINCT bildid FROM Deck WHERE bildid IS NOT NULL') + bildids = {row['bildid'] for row in cursor.fetchall()} + + # bildid-Werte identifizieren, für die es kein Verzeichnis gibt + missing_dirs = bildids - existing_dirs + + if missing_dirs: + # Einträge aus der Deck-Tabelle löschen, deren bildid keinen entsprechenden Ordner hat + placeholders = ','.join('?' for _ in missing_dirs) + sql = f'DELETE FROM Deck WHERE bildid IN ({placeholders})' + cursor.execute(sql, tuple(missing_dirs)) + deleted_count = cursor.rowcount + conn.commit() + logger.info(f"{deleted_count} Einträge aus der Deck-Tabelle gelöscht, deren 'bildid'-Verzeichnisse fehlen.") + else: + logger.info("Keine DB-Einträge zu löschen; alle 'bildid'-Verzeichnisse existieren.") + + conn.close() + except sqlite3.Error as e: + logger.error(f"Datenbankfehler beim Löschen von Einträgen aus der Deck-Tabelle: {e}") + return + # ------ # Endpoints # ------ @@ -328,3 +373,4 @@ def delete_images_by_bildid(bildid): if not os.path.exists(DATABASE): init_db() clean_debug_directories() +clean_db_entries() \ No newline at end of file