Ответ вслух Senior SQLAlchemy 2.0 обновлено

Когда ORM, а когда сырой SQL

Вопрос

Когда вы используете ORM SQLAlchemy, а когда Core или сырой SQL? Как не потерять производительность?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Образцовый ответ: «ORM беру для обычной работы с сущностями: создать заказ, поменять статус, загрузить пользователя с правами. Это читаемо и безопасно.

Что должно прозвучать в ответе

  • ORM для CRUD и бизнес-логики с объектами

  • Core и `select()` колонок для отчётов и тяжёлых выборок без создания объектов

  • Массовые операции: `insert().values([...])`, `update()` без загрузки объектов

  • Сырой SQL через `text()` с параметрами для специфичных возможностей БД

  • Контроль: логирование SQL, EXPLAIN, тесты на число запросов

  • Никогда не склеивать SQL строками

Что могут спросить следом

  • Как вставить 100 000 строк быстро?
  • Как безопасно передать параметры в text()?

Разбор

Образцовый ответ: «ORM беру для обычной работы с сущностями: создать заказ, поменять статус, загрузить пользователя с правами. Это читаемо и безопасно. Когда нужен отчёт или выборка тысяч строк для API, перехожу на select() нужных колонок и session.execute, чтобы не создавать тяжёлые объекты и не тянуть лишние поля. Массовые изменения делаю без загрузки объектов: update(Order).where(...).values(...) или пакетный insert со списком словарей, а для очень больших загрузок в PostgreSQL COPY. Специфичные возможности базы, оконные функции, ON CONFLICT, CTE, есть в Core через диалект PostgreSQL, а если нет, пишу text() строго с параметрами :name, никогда не склеивая значения в строку. Производительность контролирую логированием SQL на стенде, EXPLAIN ANALYZE для тяжёлых запросов и тестами, которые считают число запросов на эндпоинт».

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме