e185b4e4dc
- price_monitor: writes live prices to both JSON and mofin.db (holdings + live_prices + portfolio_summary) - mofin_db: added execute_with_retry/commit_with_retry with exponential backoff on 'database is locked' - mofin_db: increased timeout 5s->15s, added PRAGMA busy_timeout=15000 - price_monitor retry loop: fixed break-before-if-ok bug (was not retrying on write failure) - DB connection: WAL mode + retry decorator for all write operations - cash sync: preserves DB authoritative cash (JSON cash not pushed to DB) This is the DB-first version. JSON writes remain for dashboard compatibility. Next step: remove JSON writes entirely for full DB-only architecture.
23 lines
968 B
Python
23 lines
968 B
Python
import sqlite3
|
|
|
|
# Script connects to THIS db
|
|
proj_db = '/home/hmo/projects/MoFin/data/mofin.db'
|
|
# Real data lives in THIS db
|
|
real_db = '/home/hmo/web-dashboard/data/mofin.db'
|
|
|
|
for label, path in [("project", proj_db), ("real", real_db)]:
|
|
db = sqlite3.connect(path)
|
|
tables = [r[0] for r in db.execute("SELECT name FROM sqlite_master WHERE type='table'")]
|
|
print(f"{label} db ({path}): {len(tables)} tables")
|
|
for t in tables:
|
|
if t == 'todos':
|
|
sql = db.execute(f"SELECT sql FROM sqlite_master WHERE name='{t}'").fetchone()
|
|
print(f" {t}: {sql[0][:100] if sql else 'no sql'}")
|
|
elif t in ('holdings', 'holding_strategies', 'watchlist_stocks', 'portfolio_summary'):
|
|
cnt = db.execute(f"SELECT COUNT(*) FROM {t}").fetchone()[0]
|
|
print(f" {t}: {cnt} rows")
|
|
else:
|
|
cnt = db.execute(f"SELECT COUNT(*) FROM {t}").fetchone()[0]
|
|
print(f" {t}: {cnt} rows")
|
|
db.close()
|