Как добавить транзакции в SQLAlchemy 2.0 Python

У меня есть вот такая функция, в которую нужно добавить транзакции:

async def actualize_objects(objects, object_repository) -> None:
    to_create, to_update = [], []
    await object_repository.archive_all()
    already_have = await object_repository.get_all_ids()
    for object in objects:
        if object.id not in already_have:
            to_create.append(object)
        else:
            to_update.append(object)

    await object_repository.create_all(to_create)
    await object_repository.update_all(to_update)

Она принимает объекты и обновляет информацию о них в базе данных. Шаг await object_repository.archive_all() должен быть выполнен только при уверенности, что все остальные шаги тоже выполнятся. Как я могу добавить транзакцию так, чтобы в случае неудачного исполнения остального кода, база откатывалась в изначальное состояние?

Я пробую сделать вот таким образом, но это не срабатывает и база не откатывается. Использую SQLAlchemy 2.0, БД Postgres.

async def actualize_objects(objects, object_repository) -> None:
    await object_repository._session.begin_nested()
    try:
        to_create, to_update = [], []
        await object_repository.archive_all()
        already_have = await object_repository.get_all_ids()
        for object in objects:
            if object.id not in already_have:
                to_create.append(object)
            else:
                to_update.append(object)
        await object_repository.create_all(to_create)
        await object_repository.update_all(to_update)
    except Exception as error:
        print('ошибка')
        await object_repository._session.rollback()

Ответы (0 шт):