/ sussro_services / db / session.py
session.py
 1  """Database session management."""
 2  from typing import Generator
 3  
 4  from sqlalchemy import create_engine
 5  from sqlalchemy.ext.declarative import declarative_base
 6  from sqlalchemy.orm import sessionmaker, Session
 7  
 8  from ..core.config import settings
 9  
10  # Create database engine
11  engine = create_engine(
12      settings.DATABASE_URI,
13      pool_pre_ping=True,
14      pool_size=20,
15      max_overflow=10,
16      pool_recycle=3600,
17  )
18  
19  # Create session factory
20  SessionLocal = sessionmaker(
21      autocommit=False,
22      autoflush=False,
23      bind=engine,
24      expire_on_commit=False,
25  )
26  
27  # Base class for models
28  Base = declarative_base()
29  
30  def get_db() -> Generator[Session, None, None]:
31      """Dependency function that yields database sessions.
32      
33      Yields:
34          Session: A database session
35      """
36      db = SessionLocal()
37      try:
38          yield db
39      finally:
40          db.close()
41  
42  def init_db() -> None:
43      """Initialize database tables."""
44      Base.metadata.create_all(bind=engine)
45  
46  def get_session() -> Session:
47      """Get a new database session."""
48      return SessionLocal()