"""Nächtliche Kopie der Datenbank. Sammlungen, Wertungen und Wünsche liegen nur in dieser einen Datei. Die Kopie entsteht über SQLites eigene Backup-Schnittstelle — die ist auch dann konsistent, wenn gerade jemand schreibt. Es bleiben die letzten vierzehn Stände, jeder Tag einer. """ import logging import sqlite3 from datetime import date from .config import DB_PATH log = logging.getLogger("app.backup") BEHALTEN = 14 def sichern(): ordner = DB_PATH.parent / "backups" ordner.mkdir(parents=True, exist_ok=True) ziel = ordner / f"{DB_PATH.stem}-{date.today():%Y-%m-%d}{DB_PATH.suffix}" quelle = sqlite3.connect(DB_PATH) kopie = sqlite3.connect(ziel) try: quelle.backup(kopie) finally: kopie.close() quelle.close() # Die Namen sortieren nach Datum, das Alte steht vorn alte = sorted(ordner.glob(f"{DB_PATH.stem}-*{DB_PATH.suffix}"))[:-BEHALTEN] for alt in alte: alt.unlink() log.info("Datenbank gesichert: %s", ziel.name) return ziel