Встречается на собеседованиях • сегодня

Как реализовать транзакции вручную без встроенного механизма

Для реализации транзакций вручную можно использовать паттерн "Unit of Work". Основная идея - накапливать изменения и применять их атомарно. Пример с базой данных:

python
class ManualTransaction:
    def __init__(self, connection):
        self.connection = connection
        self.operations = []
        
    def add_operation(self, query, params=None):
        self.operations.append((query, params or ()))
        
    def commit(self):
        cursor = self.connection.cursor()
        try:
            for query, params in self.operations:
                cursor.execute(query, params)
            self.connection.commit()
            self.operations = []
        except Exception as e:
            self.connection.rollback()
            raise e
            
    def rollback(self):
        self.operations = []

Использование:

python
conn = get_db_connection()
tx = ManualTransaction(conn)
try:
    tx.add_operation("INSERT INTO users VALUES (?, ?)", (1, "Alice"))
    tx.add_operation("UPDATE accounts SET balance = balance + 100 WHERE user_id = ?", (1,))
    tx.commit()
except:
    tx.rollback()

Ключевые моменты:

  1. Все операции собираются, но не выполняются до commit()
  2. При ошибке вызывается rollback()
  3. Подходит для простых случаев, но не заменяет полноценные транзакции СУБД
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы