Когда ORM, а когда сырой SQL
Вопрос
Когда вы используете ORM SQLAlchemy, а когда Core или сырой SQL? Как не потерять производительность?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
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 ошибок.
Предыдущий вопрос
Одна Session на несколько потоков
Следующий вопрос
Как вы управляете Session в веб-приложении