src/backend/infrastructure/datasource.py (50 lines of code) (raw):

from sqlalchemy import MetaData, create_engine from sqlalchemy.engine.url import URL from sqlalchemy.pool import QueuePool from market_alerts.config import ( DB_DATABASE, DB_DIALECT, DB_DRIVER, DB_HOST, DB_PASSWORD, DB_PORT, DB_USER, ) metadata = MetaData() class Database: def __init__( self, username: str, password: str, host: str, port: int, database: str, dialect: str, driver: str, ) -> None: self.username = username self.password = password self.host = host self.port = port self.database = database self.dialect = dialect self.driver = driver def connect(self) -> None: self.engine = create_engine( URL( username=self.username, password=self.password, host=self.host, port=self.port, database=self.database, drivername=f"{self.dialect}+{self.driver}", query={}, ), poolclass=QueuePool, pool_size=5, max_overflow=10, pool_timeout=30, ) def get_connection(self): return self.engine.connect() database = Database(DB_USER, DB_PASSWORD, DB_HOST, DB_PORT, DB_DATABASE, DB_DIALECT, DB_DRIVER)