Какое ключевое слово применяет транзакцию?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Ключевое слово для управления транзакциями в 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.