Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 987новых вакансий за сутки·91 463вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 238
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 401 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python16 417
  • Облачные технологии13 174
  • QA вакансии3 434
  • Backend вакансии2 036
  • Инженер данных1 672
  • Продакт-менеджер1 168

Разработка

  • Android1 816
  • iOS1 666
  • AI вакансии937
  • Fullstack вакансии892
  • Frontend вакансии717
  • Mobile вакансии38

По стеку

  • Go8 561
  • Java6 090
  • Node.js1 889
  • Kotlin1 554
  • .NET1 545
  • Rust1 432
  • PHP640
  • C#562
  • C++498

DevOps и инфраструктура

  • Kubernetes7 303
  • DevOps вакансии5 594
  • Linux-инфраструктура5 291
  • Terraform / IaC4 014
  • CI/CD2 557
  • Мониторинг и Observability1 735
  • SRE548
  • Кибербезопасность403

Аналитика и данные

  • Data Scientist1 037
  • Бизнес-аналитик868
  • Аналитик данных830
  • Системный аналитик134

Другие направления

  • Проджект-менеджер529
  • UI/UX дизайн129
  • Ручное тестирование14

По регионам

  • Вакансии в США44 925
  • Вакансии в Европе21 347
  • Вакансии в Канаде4 453
  • Работа в России3 876

По формату

  • Удалённые вакансии74 108
  • Релокация в США44 925
  • Гибридная работа11 411
  • Офисная работа6 957

По уровню

  • Senior вакансии41 290
  • Middle вакансии20 424
  • Junior вакансии6 654

Сейчас нанимают

Все компании
  • Wise194 вакансии
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab136 вакансий
  • Celonis45 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo19 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме SQLAlchemyВсе вопросы
SQLAlchemyJuniorТеория

Что такое SQLAlchemy и каковы его два основных компонента (Core vs ORM)?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

SQLAlchemy состоит из Core (SQL Expression Language, Engine, пул соединений) и ORM (Data Mapper, Unit of Work, управление объектами). Core ближе к SQL, ORM — к бизнес-объектам.

SQLAlchemy Core

Нижний слой: абстракция над DBAPI (PEP 249). Предоставляет:

  • Engine и Connection — управление пулом соединений и транзакциями.
  • Table / Column / MetaData — описание схемы в Python без ORM-классов.
  • SQL Expression Language — конструктор SQL-запросов, который генерирует диалект-специфичный SQL.
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, select

engine = create_engine("postgresql+psycopg://user:pass@localhost/db")
meta = MetaData()

users = Table(
    "users", meta,
    Column("id", Integer, primary_key=True),
    Column("name", String(100)),
)

# Запрос через Core (без ORM-классов):
with engine.connect() as conn:
    stmt = select(users).where(users.c.name == "Alice")
    rows = conn.execute(stmt).fetchall()
    print(rows)  # [(1, 'Alice')]

Что такое SQLAlchemy

SQLAlchemy — библиотека для работы с реляционными БД на Python, де-факто стандарт в экосистеме. Состоит из двух слоёв, которые можно использовать независимо.

SQLAlchemy ORM

Верхний слой: реализует паттерны Data Mapper и Unit of Work. Маппит Python-классы на таблицы, управляет identity map и отслеживает изменения объектов.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session

class Base(DeclarativeBase):
    pass

class User(Base):
    __tablename__ = "users"
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str] = mapped_column(String(100))

# Создание таблицы:
Base.metadata.create_all(engine)

# CRUD через ORM:
with Session(engine) as session:
    session.add(User(name="Alice"))
    session.commit()

    user = session.get(User, 1)
    print(user.name)  # Alice

Когда что использовать

  • Core — bulk insert/update, сложные аналитические запросы (window functions, CTE), миграции (Alembic использует Core), работа с raw SQL через text().
  • ORM — CRUD-сервисы, бизнес-логика с объектной моделью, связи (relationships), валидация на уровне Python.
  • Оба слоя можно смешивать: ORM-запрос можно выполнить через session.execute(select(User)), а внутри получить Row-объекты Core.

Подводные камни

  • ORM скрывает количество SQL-запросов: N+1 при lazy loading — самая частая проблема в production.
  • Core-запросы не участвуют в identity map: изменение объекта через conn.execute(update(...)) не обновит уже загруженный ORM-объект в сессии.
  • В SQLAlchemy 2.0 session.execute(select(User)) возвращает Result, а не список — нужен явный .scalars().all() или .all().
  • create_engine() принимает строку подключения с диалектом: postgresql+psycopg:// для psycopg3, postgresql+asyncpg:// для async. Путаница с драйвером даёт невнятные ошибки.
  • MetaData нужно передавать явно или использовать Base.metadata — иначе create_all() не найдёт таблицы.
  • ORM не заменяет понимание SQL: неправильно написанный relationship() с lazy="select" в цикле даёт сотни запросов незаметно.

Частые вопросы на собеседовании

  • Как решить проблему N+1 запросов в SQLAlchemy с помощью selectinload или joinedload?
  • Как работает Session в SQLAlchemy и что такое паттерн Unit of Work?
  • Как делать zero-downtime миграции с Alembic и SQLAlchemy models?
  • Что такое Engine в SQLAlchemy и как работает пул соединений?

Типичные ошибки

  • Описывать core vs orm только как термин и не показывать механизм на минимальном примере.
  • Игнорировать ошибки, пустые данные, конкурентный доступ или границы транзакции.
  • Не связывать поведение с официальным контрактом SQLAlchemy и реальной эксплуатацией.

Что проверяет интервьюер

  • Объясняет core vs orm через последовательность действий, а не через набор ключевых слов.
  • Приводит короткий кодовый пример или production-сценарий с ожидаемым поведением.
  • Называет хотя бы один риск: производительность, безопасность, транзакции, память или сопровождение.

Как вы знаете этот вопрос?

Проверить себя по теме SQLAlchemy →

Источники

  • https://docs.sqlalchemy.org/en/20/tutorial/index.html
←Предыдущий вопросКак сравнить SQLAlchemy с raw SQL, query builder и другими ORM по контролю, типобезопасности и производительности?Следующий вопрос→Когда SQLAlchemy ускоряет разработку, а когда ORM-абстракция начинает мешать понимать базу данных?

Связанные темы

SQLAlchemydatabase-designtechnical-reasoning

Вакансии с этим навыком

  • Python developer