Назад к вопросам
Middle
69
questionbank

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

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

В SQL:

  • BEGIN TRANSACTION (или BEGIN WORK, START TRANSACTION): Инициирует новую транзакцию.
  • COMMIT: Сохраняет все изменения, сделанные в текущей транзакции, и завершает ее.
  • ROLLBACK: Отменяет все изменения, сделанные в текущей транзакции, и возвращает базу данных в состояние до начала транзакции.
  • SAVEPOINT: Устанавливает точку сохранения внутри транзакции, к которой можно откатиться с помощью ROLLBACK TO SAVEPOINT.

В Python при работе с базами данных (например, с использованием модулей sqlite3 или psycopg2) управление транзакциями часто осуществляется через объект соединения:

# Пример с sqlite3
import sqlite3

conn = sqlite3.connect('mydatabase.db')
try:
    conn.execute("INSERT INTO users (name) VALUES ('Alice')")
    conn.commit() # Зафиксировать изменения
except Exception as e:
    print(f"Ошибка: {e}")
    conn.rollback() # Откатить изменения при ошибке
finally:
    conn.close()
# Пример с psycopg2
import psycopg2

conn = psycopg2.connect("dbname=mydatabase user=myuser password=mypassword")
try:
    with conn.cursor() as cur:
        cur.execute("INSERT INTO products (name) VALUES (%s)", ('Laptop',))
    conn.commit() # Зафиксировать изменения
except Exception as e:
    print(f"Ошибка: {e}")
    conn.rollback() # Откатить изменения при ошибке
finally:
    conn.close()

Некоторые ORM (например, SQLAlchemy) предоставляют свои абстракции для управления транзакциями через сессии.

# Пример с SQLAlchemy
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)

engine = create_engine('sqlite:///mydatabase.db')
Base.metadata.create_all(engine)

Session = sessionmaker(bind=engine)
session = Session()

try:
    new_user = User(name='Bob')
    session.add(new_user)
    session.commit() # Зафиксировать изменения
except Exception as e:
    print(f"Ошибка: {e}")
    session.rollback() # Откатить изменения при ошибке
finally:
    session.close()