Используешь ли новые возможности SQLAlchemy и Pydantic
Что проверяют
Следите ли вы за инструментами, на которых пишете каждый день, или застряли на API трёхлетней давности. SQLAlchemy 2.0 и Pydantic v2 вышли в 2023 году и заметно поменяли привычный код. Следом просят показать, как у вас сейчас выглядит модель или запрос.
Как отвечать
По SQLAlchemy 2.0 назовите то, что реально меняет код:
- единый стиль запросов:
session.execute(select(User).where(...))иsession.scalars(...)вместоsession.query(), который оставлен как legacy; - типизированные модели:
DeclarativeBase, аннотацииMapped[int]иmapped_column(). Тип колонки и nullable выводятся из аннотаций; - asyncio:
create_async_engineиAsyncSessionс асинхронным драйвером, напримерasyncpgилиpsycopgтретьей версии. Появились ещё в 1.4, в 2.0 стали штатной частью; - массовые операции:
insert(...).returning(...)и пакетная вставка черезsession.execute(insert(Model), [...]).
По Pydantic v2:
- ядро на Rust (
pydantic-core): валидация заметно быстрее первой версии; - новые имена:
model_validate,model_dump,model_dump_jsonвместоparse_objи.dict(),model_config = ConfigDict(...)вместо вложенногоclass Config; - валидаторы:
field_validatorиmodel_validatorвместоvalidatorиroot_validator, плюс валидаторы черезAnnotated; - связка с ORM:
from_attributes=Trueвместоorm_mode, чтобы собирать схему прямо из объекта SQLAlchemy; - прочее:
TypeAdapterдля валидации без модели, настройки в отдельном пакетеpydantic-settings.
Хорошо, если расскажете о миграции своего проекта: что сломалось, сколько заняло, как проверяли. Если сидите на старых версиях, объясните почему и что изменится при переходе.
Где спотыкаются
Говорят «использую последние возможности» и называют новинкой асинхронный API из SQLAlchemy 1.4. В 2026 году это не новость.
Переходят на AsyncSession и получают MissingGreenlet при обращении к ленивой связи. В асинхронном коде связи грузят явно через selectinload или используют AsyncAttrs.
Продолжают писать .dict() и orm_mode на Pydantic v2: код работает с предупреждениями об устаревании, но выдаёт, что новый API вы не открывали.