← Назад к вопросам

Какое ключевое слово применяет транзакцию?

1.6 Junior🔥 81 комментариев
#Django#Базы данных (SQL)

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Ключевое слово для управления транзакциями в Python

В Python управление транзакциями зависит от контекста использования и библиотеки, но чаще всего речь идёт о контекстном менеджере with в сочетании с объектами курсоров или сессий баз данных.

Основные способы управления транзакциями

1. Контекстный менеджер with (рекомендуемый способ)

Это универсальный подход, который автоматически фиксирует (commit) или откатывает (rollback) транзакцию:

import sqlite3

with sqlite3.connect(":memory:") as connection:
    cursor = connection.cursor()
    cursor.execute("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)")
    cursor.execute("INSERT INTO users (name) VALUES (?)", ("Alice",))
    # При выходе из блока с успехом — автоматический commit
    # При исключении — автоматический rollback

2. SQLAlchemy (ORM фреймворк)

В SQLAlchemy для управления транзакциями используется сессия и контекстный менеджер:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine("postgresql://user:pass@localhost/db")
Session = sessionmaker(bind=engine)

with Session() as session:
    user = User(name="Bob")
    session.add(user)
    # commit происходит автоматически при выходе

3. Явное управление методами commit() и rollback()

conn = sqlite3.connect(":memory:")
try:
    cursor = conn.cursor()
    cursor.execute("INSERT INTO users (name) VALUES (?)", ("Charlie",))
    conn.commit()  # Зафиксировать изменения
except Exception as e:
    conn.rollback()  # Откатить при ошибке
    raise
finally:
    conn.close()

Почему with — лучший выбор

  • Безопасность: гарантирует откат при ошибке
  • Читаемость: явно показывает область действия транзакции
  • Надёжность: работает даже при необработанных исключениях
  • PEP 249: соответствует стандарту DB API для Python

Atomicity (атомарность) в транзакциях

Транзакция — это набор операций, которые либо полностью выполняются (commit), либо полностью откатываются (rollback). Это гарантирует консистентность данных.

with connection:
    # Обе операции выполнятся или обе откатятся
    cursor.execute("UPDATE balance SET amount = amount - 100 WHERE user_id = 1")
    cursor.execute("UPDATE balance SET amount = amount + 100 WHERE user_id = 2")

Ответ: with — ключевое слово, которое применяет контекстный менеджер для безопасного управления транзакциями в Python.

Какое ключевое слово применяет транзакцию? | PrepBro