Sobes.tech
Назад к вопросам
Junior — Middle
53

Можешь назвать ключевые компоненты библиотеки SQLAlchemy, с которыми обычно работают?

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

sobes.tech AI

Что хотят услышать интервьюеры:

Обычно ожидают, что будут названы два основных слоя SQLAlchemy: Core и ORM. Также важно понимать роль Engine, Connection, Session, metadata и объектов Table/Column. Хорошо, если отдельно упомянуть, что Core ближе к SQL, а ORM — к работе с объектами Python.

Определение:

SQLAlchemy — это библиотека для работы с базами данных в Python, которая состоит из нескольких ключевых компонентов.

  • Engine — создаёт подключение к БД и управляет пулом соединений.
  • Connection — объект для выполнения SQL-запросов на уровне Core.
  • MetaData — хранит описание схемы базы данных.
  • Table / Column — описывают таблицы и их поля в Core.
  • SQL Expression Language / Core — слой для построения SQL-запросов программно.
  • ORM — слой отображения таблиц на Python-классы.
  • Session — управляет объектами ORM, их изменениями и транзакциями.
  • Declarative Base / mapped classes — способ объявлять ORM-модели как обычные классы.

Пример использования:

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

engine = create_engine("sqlite:///example.db")
Base = declarative_base()

class User(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True)
    name = Column(String)

Base.metadata.create_all(engine)

with Session(engine) as session:
    session.add(User(name="Alice"))
    session.commit()

    users = session.query(User).all()
    for user in users:
        print(user.id, user.name)

Пояснение кода:

В этом примере используются сразу несколько ключевых компонентов SQLAlchemy:

  1. create_engine(...) создаёт Engine, который знает, как подключаться к SQLite.
  2. declarative_base() создаёт базовый класс для ORM-моделей.
  3. Класс User — это ORM-отображение таблицы users.
  4. Column(...) описывает поля таблицы: id и name.
  5. Base.metadata.create_all(engine) создаёт таблицу в базе по описанию модели.
  6. Session(engine) открывает Session для работы с объектами ORM.
  7. session.add(...) добавляет объект в сессию, а commit() сохраняет изменения в БД.
  8. session.query(User).all() получает все записи как объекты User.

Ключевые моменты:

  • Core и ORM — это два главных уровня SQLAlchemy.
  • Engine отвечает за подключение к БД, Session — за работу с ORM-объектами и транзакциями.
  • MetaData, Table, Column используются в Core для описания схемы.
  • Declarative mapping позволяет объявлять таблицы через Python-классы.
  • В собеседовании важно показать понимание разницы между SQL-ориентированным и объектно-ориентированным использованием библиотеки.
  • Часто достаточно перечислить компоненты и кратко объяснить их назначение без углубления в детали API.