-
Notifications
You must be signed in to change notification settings - Fork 1
Database
Il database di Spendif.ai Γ¨ un singolo file SQLite (
ledger.db). Questa guida copre tutto quello che riguarda i dati: dove si trovano, come fare backup, come ripristinarli, come spostarli su un altro computer.
- Cosa contiene il database
- Dove si trova il database
- Backup
- Ripristino
- Primo avvio con un database esistente
- Spostare il database su un altro computer
- Ispezione diretta (sqlite3)
- Corruzione del database
Il file ledger.db contiene tutto β non esistono altri file di dati da considerare nel backup:
| Tabella | Contenuto |
|---|---|
transaction |
Tutte le transazioni importate |
category_rule |
Regole deterministiche di categorizzazione |
description_rule |
Regole di pulizia delle descrizioni |
document_schema |
Schemi dei file CSV/XLSX (colonne, formato, ecc.). Gli schema senza header_sha256 vengono eliminati automaticamente all'avvio (migrazione _migrate_purge_orphan_schemas). A runtime, schema con parse rate < 10% vengono auto-invalidati e rimossi. |
user_settings |
Impostazioni utente (LLM, locale, formato date, contesti, flag onboardingβ¦) |
account |
Conti bancari definiti dall'utente (nome + banca) |
taxonomy_category / taxonomy_subcategory
|
Tassonomia personalizzata (modificabile) |
taxonomy_default |
Template tassonomia built-in (5 lingue β sola lettura, non modificare) |
reconciliation_link |
Link cartaβconto (riconciliazione RF-03) |
internal_transfer_link |
Giroconti interni (RF-04) |
import_batch / import_job
|
Storico delle importazioni |
I template tassonomia (
taxonomy_default) sono incorporati nel codice (db/taxonomy_defaults.py) e vengono ricreati automaticamente da zero ad ogni migrazione. Non Γ¨ necessario includerli in un backup separato.
| ModalitΓ di installazione | Percorso |
|---|---|
One-liner Docker (install.sh / install.ps1) |
Volume Docker spendifai_data β /app/data/ledger.db dentro il container |
| Docker Compose da repo | Volume Docker spendifai_data β /app/data/ledger.db dentro il container |
| Nativa (Mac/Linux, uv) |
./ledger.db nella cartella del progetto |
Il volume spendifai_data Γ¨ gestito da Docker e non Γ¨ direttamente accessibile dal filesystem del tuo computer come una cartella normale. Per leggere o scrivere nel volume bisogna usare un container temporaneo come "ponte" β i comandi nelle sezioni seguenti fanno esattamente questo.
# Crea la cartella di backup (una volta sola)
mkdir -p ~/spendifai-backup
# Copia il DB con un nome che include la data
cp ledger.db ~/spendifai-backup/ledger_$(date +%Y%m%d_%H%M%S).dbMetodo diretto con docker cp, non richiede container aggiuntivi:
mkdir -p ~/spendifai-backup
docker cp spendifai_app:/app/data/ledger.db \
~/spendifai-backup/ledger_$(date +%Y%m%d_%H%M%S).db
spendifai_appè il nome del container (definito indocker-compose.yml). Il container deve essere in esecuzione per usaredocker cp.
Se il container Γ¨ fermo usa un container temporaneo Alpine (piΓΉ leggero di Python):
mkdir -p ~/spendifai-backup
docker run --rm \
-v spendifai_data:/data \
-v ~/spendifai-backup:/backup \
alpine cp /data/ledger.db /backup/ledger_$(date +%Y%m%d_%H%M%S).dbWindows (PowerShell): sostituisci
~/spendifai-backupcon$env:USERPROFILE\spendifai-backupe$(date +%Y%m%d_%H%M%S)con la data a mano, es.20260317_120000.
# Backup ogni giorno alle 03:00
0 3 * * * docker cp spendifai_app:/app/data/ledger.db ~/spendifai-backup/ledger_$(date +\%Y\%m\%d).db
# Cancella i backup piΓΉ vecchi di 30 giorni
0 4 * * * find ~/spendifai-backup -name "ledger_*.db" -mtime +30 -deletePer installazione nativa:
0 3 * * * cp /percorso/progetto/ledger.db ~/spendifai-backup/ledger_$(date +\%Y\%m\%d).db
0 4 * * * find ~/spendifai-backup -name "ledger_*.db" -mtime +30 -delete# 1. Ferma l'app
pkill -f "streamlit run app.py"
# 2. Salva il DB attuale (per sicurezza)
cp ledger.db ledger_before_restore_$(date +%Y%m%d_%H%M%S).db
# 3. Ripristina il backup scelto
cp ~/spendifai-backup/ledger_20260317_030000.db ledger.db
# 4. Riavvia
uv run streamlit run app.py# 1. Ferma il container
docker compose -C ~/spendifai down
# 2. Copia il backup nel volume
docker run --rm \
-v spendifai_data:/data \
-v ~/spendifai-backup:/backup:ro \
alpine cp /backup/ledger_20260317_030000.db /data/ledger.db
# 3. Riavvia
docker compose -C ~/spendifai up -dSe hai installato da repository invece che con il one-liner, sostituisci
docker compose -C ~/spendifaicondocker composedalla cartella del progetto.
Utile se vuoi recuperare solo le regole di categorizzazione da un backup senza sovrascrivere le transazioni. Richiede sqlite3 installato sull'host:
sqlite3 ledger.db "
ATTACH DATABASE '/percorso/backup/ledger_20260317.db' AS bkp;
DELETE FROM category_rule;
INSERT INTO category_rule SELECT * FROM bkp.category_rule;
DETACH DATABASE bkp;
"Stessa logica per altre tabelle: description_rule, user_settings, taxonomy_category, taxonomy_subcategory.
Se hai giΓ un ledger.db (ad esempio creato con l'installazione nativa) e vuoi usarlo nel container Docker, devi copiarlo nel volume prima di avviare l'app.
# 1. Assicurati che il container sia fermo
docker compose -C ~/spendifai down
# 2. Copia il DB nel volume
docker run --rm \
-v spendifai_data:/data \
-v "/percorso/assoluto/ledger.db":/source/ledger.db:ro \
alpine cp /source/ledger.db /data/ledger.db
# 3. Verifica che il file sia arrivato
docker run --rm \
-v spendifai_data:/data \
alpine ls -lh /data/
# 4. Avvia l'app
docker compose -C ~/spendifai up -dMac: il percorso assoluto Γ¨
/Users/tuonome/spendifai/ledger.dbLinux:/home/tuonome/spendifai/ledger.db
- Fai il backup del DB sul computer di origine (sezione 3)
-
Copia il file
.dbsul nuovo computer (USB, cloud, scp, ecc.) -
Installa Spendif.ai sul nuovo computer con il one-liner (
install.sh/install.ps1) - Importa il DB nel volume Docker (sezione 5)
- Apri l'app: tutte le transazioni, regole e impostazioni sono presenti
Il file SQLite Γ¨ portabile: funziona identicamente su Mac, Linux e Windows, indipendentemente dall'architettura del processore (Intel / ARM).
Puoi aprire il database con qualsiasi client SQLite. Esempi:
Da terminale (sqlite3):
# Installazione nativa β dalla cartella del progetto
sqlite3 ledger.db
# Docker β estrai prima il DB con docker cp
docker cp spendifai_app:/app/data/ledger.db /tmp/ledger_inspect.db
sqlite3 /tmp/ledger_inspect.dbQuery utili:
-- Numero di transazioni per anno
SELECT strftime('%Y', date) AS anno, COUNT(*) FROM "transaction" GROUP BY anno;
-- Ultime 10 transazioni
SELECT date, description, amount, category FROM "transaction" ORDER BY date DESC LIMIT 10;
-- Regole attive
SELECT pattern, category, subcategory FROM category_rule ORDER BY priority;
-- Impostazioni utente
SELECT key, value FROM user_settings;Client grafici: DB Browser for SQLite (gratuito, Mac/Linux/Windows) β apri direttamente il file .db.
La corruzione del file SQLite Γ¨ rara ma puΓ² avvenire in caso di interruzione di corrente durante una scrittura.
sqlite3 ledger.db "PRAGMA integrity_check;"
# Output atteso: ok
# Se l'output contiene errori, il file Γ¨ corrottosqlite3 ledger.db ".recover" | sqlite3 ledger_recovered.db
mv ledger.db ledger_corrupted_$(date +%Y%m%d).db
mv ledger_recovered.db ledger.dbVerifica di nuovo con PRAGMA integrity_check;. Se il recupero non riesce, ripristina dall'ultimo backup valido (sezione 4).
- L'installazione Docker ha
restart: unless-stoppedche evita shutdown improvvisi del container - Fare backup regolari (sezione 3.4) garantisce sempre un punto di ripristino recente