SQLAlchemy - как выполнить несколько запросов из разных репозиториев в пределах одной транзакции?
У меня есть приложение с уровнями абстракции: Model, Repository, Service.
Есть ситуация, в которой метод сервиса вызывает несколько методов из репозитория, или даже из нескольких разных репозиториев. При этом эти запросы довольно тесно друг с другом связаны, поэтому хочется выполнить их в пределах транзакции. Как, в таком случае, поступать?
Моё предложение: создавать сессию внутри сервиса, в то же время при вызове метода репозитория сервис передаёт ему созданный session, внутри репозитория происходит session.execute(some-query), и, в конечном итоге, по вызову всех нужных функций уровня репозитория, сервис выполняет session.commit() и удаляет сессию.
Однако мне кажется, что это костыль, причём очень некрасивый. Тем более, такой подход порождает огромное количество шаблонного кода: внутри каждого метода каждого сервиса начало на session = Session() и окончание на session.commit()
Как в такой ситуации лучше всего поступить?