| """Database connection and initialization for AMR-Guard.""" | |
| import sqlite3 | |
| from pathlib import Path | |
| from contextlib import contextmanager | |
| # Project paths | |
| PROJECT_ROOT = Path(__file__).parent.parent.parent | |
| DATA_DIR = PROJECT_ROOT / "data" | |
| DOCS_DIR = PROJECT_ROOT / "docs" | |
| DB_PATH = DATA_DIR / "medic.db" | |
| SCHEMA_PATH = Path(__file__).parent / "schema.sql" | |
| def init_database() -> None: | |
| """Initialize the database with schema.""" | |
| DATA_DIR.mkdir(parents=True, exist_ok=True) | |
| with get_connection() as conn: | |
| with open(SCHEMA_PATH, 'r') as f: | |
| conn.executescript(f.read()) | |
| conn.commit() | |
| print(f"Database initialized at {DB_PATH}") | |
| def get_connection(): | |
| """Context manager for database connections.""" | |
| conn = sqlite3.connect(DB_PATH) | |
| conn.row_factory = sqlite3.Row | |
| try: | |
| yield conn | |
| finally: | |
| conn.close() | |
| def execute_query(query: str, params: tuple = ()) -> list[dict]: | |
| """Execute a query and return results as list of dicts.""" | |
| with get_connection() as conn: | |
| cursor = conn.execute(query, params) | |
| columns = [description[0] for description in cursor.description] | |
| return [dict(zip(columns, row)) for row in cursor.fetchall()] | |
| def execute_insert(query: str, params: tuple = ()) -> int: | |
| """Execute an insert and return the last row id.""" | |
| with get_connection() as conn: | |
| cursor = conn.execute(query, params) | |
| conn.commit() | |
| return cursor.lastrowid | |
| def execute_many(query: str, params_list: list[tuple]) -> None: | |
| """Execute many inserts.""" | |
| with get_connection() as conn: | |
| conn.executemany(query, params_list) | |
| conn.commit() | |
| if __name__ == "__main__": | |
| init_database() | |