SQLAlchemy - це бібліотека для роботи з реляційними базами даних в Python. Вона також підтримує транзакції для гарантії цілісності даних. Давайте розглянемо приклад, як використовувати транзакції в SQLAlchemy.
Для цього прикладу ми використаємо SQLite як базу даних.
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
# Створення бази даних у пам’яті SQLite
engine = create_engine(’sqlite:///:memory:’)
# Створення базового класу для оголошення моделі
Base = declarative_base()
# Визначення моделі для таблиці товарів
class Product(Base):
__tablename__ = ’products’
id = Column(Integer, primary_key=True)
name = Column(String)
quantity = Column(Integer)
# Створення таблиці у базі даних
Base.metadata.create_all(engine)
# Створення сесії SQLAlchemy
Session = sessionmaker(bind=engine)
session = Session()
def process_transaction(product_id, quantity_change):
try:
# Початок транзакції
with session.begin():
# Отримання товару з бази даних за його ідентифікатором
product = session.query(Product).get(product_id)
if product is not None:
# Зміна кількості товару
product.quantity += quantity_change
else:
# Додавання нового товару, якщо його немає в базі
new_product = Product(id=product_id, quantity=quantity_change)
session.add(new_product)
except Exception as e:
# Відміна транзакції у разі помилки
print(f"Error: {e}")
# Приклад використання
process_transaction(1, 10) # Додати 10 одиниць товару
process_transaction(1, -5) # Списати 5 одиниць товару
# Зчитати дані із бази даних
all_products = session.query(Product).all()
for product in all_products:
print(f"Товар {product.id}: {product.quantity} одиниць")
# Закриття сесії
session.close()
В цьому прикладі використовується session.begin()
для початку транзакції, і with
блок гарантує, що транзакція буде закрита автоматично (і підтверджена або відкладена) після виконання коду всередині блоку. Таким чином, ви можете забезпечити цілісність даних і автоматично відкатити транзакцію у разі помилки.
Автор: Рудюк С.А. 2023. K2 Cloud ERP.