и sessionmaker
одна сторона говорит, что надо делать их отдельными объектами и располагать рядом в одном модуле, а потом переиспользовать там, где вызывается.
при этом ссылается на https://docs.sqlalchemy.org/en/20/orm/session_basics.html#when-do-i-make-a-sessionmaker
другая стороная, предлагает альтернативу:
некий класс DbAPI
в котором упакованы engine и sessionmaker
типа как-то так
class DbApi:
def __init__(self, conf: Settings, *, echo: bool = False):
self.connection = conf.connection
self.engine: Optional[AsyncEngine] = self.get_engine(echo=echo)
def get_engine(self, **kwargs) -> AsyncEngine:
return create_async_engine(self.connection, echo=kwargs.get('echo', False), future=True)
def get_session(self) -> sessionmaker:
return sessionmaker(
self.engine,
class_=AsyncSession,
expire_on_commit=False,
)
db_api = DbApi(CONF)
и потом юзать db_api, там где надо, ссылаясь, что это ооп и особо не противоречит доке (ведь все вместе лежит)
Коллеги, рассудите?
я бы сказал ни та ни другая стороны не правы
у нас в проекте второй вариант и это ни разу не ооп, а протекания абстракций) в некоторых моментах использовать больно, не советую. первый подход лучше
Обсуждают сегодня