Как добавить транзакции в 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()