Обновить
1
0
Егор Жуков@tokkkta

Пользователь

Отправить сообщение

А можете подсказать почему? с UseCase согласен (но опять же дует проект сам по себе, это возможно излишне для маленьких проектов.) Но вот например открываем документацию SQLModel (sqlalchemy + pydantic) по этой ссылке: https://sqlmodel.tiangolo.com/tutorial/fastapi/session-with-dependency/?h=depe#use-the-dependency, в Depends суют сессию и все ок. Хотелось бы понять хотя бы для себя и разобраться, потому что как Я понимаю разрабы одни.

Ну по правильному разделить на слои, и тащить не сессию в роут а например класс репо (Обозвать можно как угодно, например UserRepo), в нем через инит вызывать сессию (через тот же Depends) и написать функции для класса которые будут работать с сессией. Ручка (эндпоинт) в этом подходе используется только для принятия и валидации данных на выход и выход (DTO), вся работа с БД происходит в классе репо.

Всем привет добавлю еще от себя. Во первых: при создании сессии через yield имеет смысл делать на try excpet и при ошибке звать db.rollback; Во вторых аннотаций просто не существует у Вас в коде. В третьих вот статья на том же Хабре годичной давности на Хабр: https://habr.com/ru/articles/848592/ (Не моя), посмотрите пожалуйста, на те модели что Вы предлагаете и что действительно в sqlalchemy 2.0 происходит. В четвертых не раскрыта тема с AsyncAttrs в Base, что очень полезно. Расскажу для чего, когда у Вас есть зависимости в моделях по FK и relationship, и Вам нужно будет вызвать асинхронно ту или иную модель БЕЗ selectinload или joinedload, Вы словите ошибку. Как раз эта штука решает эту проблему при дефолтном lazy. Не сочтите за оскорбление и высокомерие мое, в целом статья не плохая для старта, но есть над чем работать.

Информация

В рейтинге
6 743-й
Зарегистрирован
Активность

Специализация

Бэкенд разработчик, Фулстек разработчик
Средний
Python
ООП
Redis
FastAPI
SQLalchemy
SQL
Asyncio
Docker
Git
NoSQL