update
This commit is contained in:
39
backend/app/backup.py
Normal file
39
backend/app/backup.py
Normal file
@@ -0,0 +1,39 @@
|
||||
"""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
|
||||
Reference in New Issue
Block a user