clean_db_entries

This commit is contained in:
Andreas Knuth 2024-12-02 21:50:44 +01:00
parent 8bf95b4f38
commit b7c3b58157
1 changed files with 46 additions and 0 deletions

View File

@ -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()