40 lines
1.0 KiB
Python
40 lines
1.0 KiB
Python
"""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
|