FastAPI и SQLAlchemy: задачи на транзакции и ошибки API

API вернул успешный ответ, а запись в базе осталась прежней. Или клиент получил 409, но ошибочное бронирование уже сохранилось. В этой подборке разбираем такие сбои на FastAPI и SQLAlchemy: сначала предсказываем поведение короткого фрагмента, затем работаем с готовой лабораторной.

Что стоит различать

Объект в Session, строка в базе и HTTP-ответ — три разных вещи. Присваивание атрибута само по себе не завершает транзакцию. flush отправляет накопленные изменения в базу, а commit фиксирует транзакцию. После ошибки flush сессии может понадобиться явный rollback, прежде чем с ней получится работать дальше.

Начните с вопросов про первичный ключ и refresh. Затем разберите удаление без commit и повторный get в той же сессии: здесь важны момент отправки SQL и autoflush. После этого переходите к нарушению внешнего ключа и одновременной регистрации одного email.

От вопроса к работающему обработчику

В конце подборки есть три лабораторные: обновление и удаление комнаты, получение связанных бронирований и создание брони с проверкой конфликта. В каждой дан свой проект и описано, какой участок нужно дописать. Короткие вопросы проверяют понимание, лабораторные — умение сохранить нужное поведение API.

Для последовательного прохождения проекта откройте бесплатный курс FastAPI с базой данных и тестами. Валидацию входа можно отдельно отработать в подборке Pydantic, а доступ пользователя — в задачах на авторизацию.

FastAPI и SQLAlchemy: задачи на транзакции и ошибки API