import os from contextlib import contextmanager from typing import Generator from sqlalchemy import create_engine from sqlalchemy.orm import Session, sessionmaker from schema import Base # Database configuration DATABASE_URL = os.getenv("DATABASE_URL", "sqlite:///investors.db") # Create engine engine = create_engine(DATABASE_URL, echo=False) # Create session factory SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) def init_database(): """Initialize the database by creating all tables""" Base.metadata.create_all(bind=engine) print("Database initialized successfully!") @contextmanager def get_session() -> Generator[Session, None, None]: """Get a database session with automatic cleanup""" session = SessionLocal() try: yield session session.commit() except Exception as e: session.rollback() raise e finally: session.close() def get_session_sync() -> Session: """Get a database session for synchronous operations""" return SessionLocal()