Использовали ли чистые модели или маппинг через ORM в FastAPI
Что проверяют
Как вы разделяете модели API и модели хранения и понимаете ли, во что обходится каждый вариант. Вопрос про опыт, поэтому следом почти наверняка попросят рассказать про конкретный проект: где лежали модели, как вы их маппили и что пришлось переделать.
Как отвечать
Сначала разведите три вида моделей, которые в FastAPI часто смешивают:
- схемы API на Pydantic:
UserCreate,UserReadи подобные, они валидируют вход и описываютresponse_model. В Pydantic v2 чтение из объектов ORM включается черезConfigDict(from_attributes=True), в v1 это былorm_mode; - модели ORM: SQLAlchemy 2.0 в декларативном стиле с
DeclarativeBase,Mapped[...]иmapped_column, работа черезAsyncSessionиselect(); - чистые доменные модели:
dataclassили обычные классы без зависимости от базы и фреймворка, а репозиторий переводит их в строки таблиц и обратно. Для этого есть императивный маппинг SQLAlchemy (registry.map_imperatively) или ручные мапперы.
Отдельно стоит SQLModel: один класс служит и таблицей, и схемой Pydantic. Для CRUD это быстро, но API и схема базы сцеплены намертво.
Каркас ответа из опыта: какой был проект, какой подход выбрали, почему и что получилось. Например, ORM-модели прямо в сервисах для простого внутреннего CRUD и отдельный доменный слой там, где сложные бизнес-правила и нужны тесты без базы. Приводите свои примеры и цифры: сколько было сущностей, что сломалось, сколько занял переход на другой подход.
Если работали только с одним вариантом, так и скажите и объясните, при каких условиях перешли бы на другой. Это честнее и убедительнее пересказа статьи.
Где спотыкаются
Используют одну модель на всё: таблицу, вход и выход. Тогда password_hash или служебные поля утекают в ответ, а клиент может прислать в теле id или is_admin.
В асинхронном коде трогают ленивую связь после запроса и получают MissingGreenlet. Связи нужно подгружать явно через selectinload, а сессию создавать с expire_on_commit=False, если объекты читаются после коммита.
Называют «чистыми моделями» Pydantic-схемы. Это модели транспорта, они описывают формат API, а не бизнес-сущности.