Назад к вопросам
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()