
ORM vs Raw SQL 🪑
Вечный холивар, в котором одни топят за «удобство», а другие за «контроль».
🪑 Стул №1: SQLAlchemy ORM
ORM — это не про скорость кода, это про скорость поставки фич. Вы работаете с объектами, а не со строками.
✅ Почему это круто:
— Unit of Work: Алхимия сама следит за изменениями объектов и пушит их в базу одним транзакционным паком.
— Безопасность: SQL-инъекции? Забудьте. Если вы не используете
.text(), вы защищены по умолчанию.— Миграции: Синхронизация схемы БД с вашими моделями — это просто магия, которая экономит часы рутины.
— Domain Logic: Идеально для сложных E-commerce систем и админок, где связи между таблицами запутаннее, чем сюжет «Интерстеллара».
❌ В чем подвох:
— Overhead: Маппинг объектов — дорогая операция. На больших выборках (100k+ строк) вы почувствуете, как Python-процесс начинает жрать память и CPU.
— N+1 Problem: Главный киллер производительности. Один забытый
.joinedload() — и ваш сервис ложится под градом мелких запросов.🪑 Стул №2: Raw SQL / asyncpg (Выбор для Highload)
Когда вы упираетесь в производительность, прослойки начинают мешать.
✅ Почему это круто:
— Экстремальная скорость: Разница в 2.5 раза — это не шутка. Бинарный протокол
asyncpg позволяет выжимать максимум из сетевого канала.— Полный контроль: Вы пишете именно тот SQL, который пойдет в планировщик базы. Никакой лишней магии от ORM.
— Специфические фичи БД: Попробуйте эффективно использовать
JSONB или специфические индексы Postgres через ORM — иногда это превращается в сизифов труд.❌ В чем подвох:
— Твоя ответственность: Забыл про экранирование параметров? Поздравляю, база слита.
— Бойлерплейт: Придется руками мапить кортежи из базы в DTO/Pydantic модели. Это скучно и плодит ошибки.
— Поддержка: Читать 500 строк сырого SQL в коде через полгода — сомнительное удовольствие.
💡 Вердикт: Золотой стандарт — гибридный подход
Не нужно выбирать что-то одно. Современная архитектура выглядит так:
1. SQLAlchemy ORM — для 90% задач: CRUD, бизнес-логика, миграции и админка.
2. SQLAlchemy Core — когда ORM-объекты слишком тяжелые, но писать сырые строки еще не хочется.
3. Raw SQL (asyncpg) — для узких мест: аналитические отчеты, массовые инсерты и микросервисы с нагрузкой 10k+ RPS.
Выбирайте стул по размеру нагрузки ☝️
А на чем пишете вы?
👨💻 Только ORM, жизнь слишком коротка для написания SQL руками.
👨💻 Только Raw SQL, не доверяю этой магии.
#два_стула






