Spaces:
Sleeping
Sleeping
| from sqlalchemy import create_engine | |
| from sqlalchemy.ext.declarative import declarative_base | |
| from sqlalchemy.orm import sessionmaker | |
| from app.config import settings | |
| import logging | |
| logger = logging.getLogger(__name__) | |
| # Create SQLAlchemy engine with better error handling | |
| try: | |
| engine = create_engine( | |
| settings.DATABASE_URL, | |
| pool_pre_ping=True, # Verify connections before using | |
| pool_size=5, | |
| max_overflow=10, | |
| pool_recycle=3600, # Recycle connections after 1 hour | |
| echo=settings.DEBUG, # Log SQL queries in debug mode | |
| connect_args={ | |
| "connect_timeout": 10, # Connection timeout in seconds | |
| } | |
| ) | |
| logger.info("Database engine created successfully") | |
| except Exception as e: | |
| logger.error(f"Failed to create database engine: {e}") | |
| raise | |
| # Session factory | |
| SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) | |
| # Base class for models | |
| Base = declarative_base() | |
| # Dependency for FastAPI endpoints | |
| def get_db(): | |
| """ | |
| Database session dependency. | |
| Usage: db: Session = Depends(get_db) | |
| """ | |
| db = SessionLocal() | |
| try: | |
| yield db | |
| except Exception as e: | |
| logger.error(f"Database session error: {e}") | |
| db.rollback() | |
| raise | |
| finally: | |
| db.close() | |