Sobes.tech
Back to questions
Junior — Middle
77

Какой паттерн декоратора рекомендуется использовать для реализации управления транзакциями?

Answer from AI

sobes.tech AI

Для управления транзакциями в Python часто используют паттерн декоратора, который оборачивает функцию или метод, обеспечивая автоматическое начало, коммит и откат транзакции. Такой декоратор обычно:

  • Начинает транзакцию перед вызовом функции.
  • Выполняет функцию.
  • Если функция завершилась успешно, выполняет коммит.
  • Если возникло исключение, выполняет откат транзакции.

Пример простого декоратора для управления транзакциями:

from functools import wraps

def transactional(session):
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            try:
                result = func(*args, **kwargs)
                session.commit()
                return result
            except Exception:
                session.rollback()
                raise
        return wrapper
    return decorator

# Использование:
# @transactional(db_session)
# def some_db_operation():
#     ...

Такой подход позволяет централизованно и прозрачно управлять транзакциями, улучшая читаемость и надежность кода.