Files

34 lines
888 B
Python
Raw Permalink Normal View History

"""
core/database.py
SQLite connection manager with WAL mode for high-concurrency REST reads.
"""
import sqlite3
from contextlib import contextmanager
from pathlib import Path
DB_PATH = Path(__file__).resolve().parent.parent / "data" / "hiffi_catalog.db"
def get_connection() -> sqlite3.Connection:
DB_PATH.parent.mkdir(parents=True, exist_ok=True)
conn = sqlite3.connect(str(DB_PATH), check_same_thread=False)
conn.row_factory = sqlite3.Row
# Configure WAL mode and busy timeout for concurrent API reads
conn.execute("PRAGMA journal_mode = WAL;")
conn.execute("PRAGMA synchronous = NORMAL;")
conn.execute("PRAGMA busy_timeout = 5000;")
return conn
@contextmanager
def get_db():
conn = get_connection()
try:
yield conn
conn.commit()
except Exception:
conn.rollback()
raise
finally:
conn.close()