Untitled
unknown
plain_text
5 months ago
999 B
2
Indexable
from collections import defaultdict from typing import Any, List from sqlalchemy import Column, or_, select from sqlalchemy.orm import Session from app.helpers.custom_logger import BackendLogger class BaseLoader: session: Session model: any column: Column def __init__(self, session: Session): self.session = session self.data = defaultdict(lambda: None) async def __call__(self, keys: List[any]) -> List[Any]: klass = self.__class__ BackendLogger.debug( f"BaseLoader {klass.__name__}({klass.model.__name__}) {keys=}" ) where = [] for i in range(0, len(keys), 1000): chunk = keys[i : i + 1000] where.append(klass.column.in_(chunk)) stmt = select(klass.model).where(or_(*where)) for item in self.session.scalars(stmt): self.data[getattr(item, klass.column.key)] = item return [self.data[key] for key in keys]
Editor is loading...
Leave a Comment