Что такое SQLAlchemy в Python?

«Что такое SQLAlchemy в Python?» — вопрос из категории Python, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

SQLAlchemy — это мощный набор инструментов и ORM (Object-Relational Mapper) для Python, который предоставляет высокоуровневый и низкоуровневый способы работы с реляционными базами данных.

Два основных компонента:

  1. Core: Низкоуровневый SQL-инструментарий. Он предоставляет абстрактный слой для построения SQL-выражений, управления соединениями (пулинг) и выполнения запросов. Это «правильный» способ писать SQL в Python.
  2. ORM: Высокоуровневая надстройка над Core. Она связывает таблицы базы данных с классами Python, а строки — с экземплярами этих классов, позволяя манипулировать данными как обычными объектами.

Пример работы с ORM (Декларативный стиль):

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import declarative_base, Session

# 1. Определяем базовый класс для моделей
Base = declarative_base()

# 2. Определяем класс-модель, который соответствует таблице в БД
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String(50), nullable=False)
    email = Column(String(100), unique=True)

# 3. Создаем движок для подключения к БД (SQLite в примере)
engine = create_engine('sqlite:///app.db', echo=True) # echo=True логирует SQL

# 4. Создаем таблицы в БД
Base.metadata.create_all(engine)

# 5. Работаем с данными через сессию
with Session(engine) as session:
    # Создание нового пользователя
    new_user = User(name='Alice', email='alice@example.com')
    session.add(new_user)
    session.commit()  # INSERT INTO users ...

    # Запрос данных
    user = session.query(User).filter_by(name='Alice').first()
    print(user.email)  # alice@example.com

Ключевые преимущества:

  • Абстракция от СУБД: Код практически не меняется при переходе с PostgreSQL на MySQL или SQLite.
  • Безопасность: Использование параметризованных запросов через ORM или Core предотвращает SQL-инъекции.
  • Гибкость: Для сложных аналитических запросов можно использовать Core или гибридный подход (ORM + raw SQL).
  • Экосистема: Поддержка Alembic для миграций схемы БД.