44 lines
1.1 KiB
Python
44 lines
1.1 KiB
Python
# utils/database.py
|
|
"""Database utilities ....
|
|
|
|
This module provides classes and functions for:
|
|
- ....
|
|
- ....
|
|
- ....
|
|
"""
|
|
|
|
import logging
|
|
|
|
from sqlalchemy import create_engine
|
|
from sqlalchemy.orm import sessionmaker
|
|
from sqlalchemy.pool import QueuePool
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def get_db_engine(database_url: str):
|
|
"""Create database engine with connection pooling."""
|
|
if database_url.startswith("sqlite"):
|
|
# SQLite configuration
|
|
engine = create_engine(
|
|
database_url, connect_args={"check_same_thread": False}, echo=False
|
|
)
|
|
else:
|
|
# PostgreSQL configuration with connection pooling
|
|
engine = create_engine(
|
|
database_url,
|
|
poolclass=QueuePool,
|
|
pool_size=10,
|
|
max_overflow=20,
|
|
pool_pre_ping=True,
|
|
echo=False,
|
|
)
|
|
|
|
logger.info(f"Database engine created for: " f"{database_url.split('@')[0]}@...")
|
|
return engine
|
|
|
|
|
|
def get_session_local(engine):
|
|
"""Create session factory."""
|
|
return sessionmaker(autocommit=False, autoflush=False, bind=engine)
|