SQLAlchemy results to Pydantic schema using FastAPI #11

Поделиться
HTML-код
  • Опубликовано: 10 дек 2024

Комментарии • 26

  • @artemshumeiko
    @artemshumeiko  Год назад +1

    💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gwP 💡
    Забирай роадмап изучения самого востребованного фреймворка на Python - FastAPI здесь: t.me/ArtemShumeikoBot

  • @romankuznetsov4601
    @romankuznetsov4601 Год назад +2

    Тебя приятно слушать, продолжай делать полезные видосы. Спасибо

  • @Elena-ux2kb
    @Elena-ux2kb Год назад +2

    Наконец-то! Наконец-то я узнала, как расшифровать DTO) вокруг все употребляют, но объяснить не могут))

  • @Ardbot
    @Ardbot Год назад +1

    Замечательный курс! Но этого урока нет в плейлисте!

  • @Great_Ave
    @Great_Ave 6 месяцев назад

    Искал медь, а нашел золото. Прекрасная серия уроков!
    Артем, не планируете сделать курс по pydantic? В хорошем исполнении вообще ничего нет

  • @wildwelder36
    @wildwelder36 6 месяцев назад

    @artemshumeiko, подскажи, пожалуйста, а как конвертировать наоборот в БД модель? Ну либо наведи хотя бы где это искать. В доках пайдентика чет не нашел...

  • @yurarusanovskii
    @yurarusanovskii Год назад +1

    Планируешь ли ты создать курс по SQLAlchemy с задачами на Stepik? Я думаю, что такой курс был бы очень полезен, учитывая твой подход к обучению и отсутствия такого курса на просторах и-нета . И, вероятно, не только я столкнулся с нехваткой руконабивательных материалов по этой теме.

  • @dmitry-lz1ny
    @dmitry-lz1ny 9 месяцев назад +1

    А если у нас 2 файла со схемами. Первый юзер, а 2 резюме.
    Получается, что юзеру нужен класс резюме, а резюме класс юзера. Вот уже циклический импорт. Если не импортировать класс, то "UserDTO" не работает.
    Только если оба в 1 файл засунуть, только тогда они будут работать.
    В той же алхимии Mapped[] позволяет не указывать явный импорт класса.

    • @artemshumeiko
      @artemshumeiko  9 месяцев назад

      импортировать не нужно
      просто в кавычках указываем название модели
      Да, PyCharm будет ругаться.
      Если хочется, чтобы IDE не ругался, импортировать нужно через if TYPE_CHECKING: import UserDTO

    • @xesax
      @xesax 8 месяцев назад +1

      используй from typing import TYPE_CHECKING
      if TYPE_CHECKING:
      from models.user_models import User

  • @sergeysergey421
    @sergeysergey421 10 месяцев назад

    а dataclass как сериализовать из модели?

  • @ShugarDaddy
    @ShugarDaddy 3 месяца назад

    Делал всегда таким образом:
    response = db.execute(запрос)
    scalar = response.scalar()
    return МодельPydantic(**scalar.__dict__)
    Такой вариант может быть правильным?

    • @artemshumeiko
      @artemshumeiko  2 месяца назад +1

      да, хороший вариант
      можно еще так: ModelPydantic.model_validate(scalar, from_attributes=True)

  • @Fair-Wez
    @Fair-Wez 8 месяцев назад

    Что-то в асинхронной версии не идет 🤔MissingGreenlet

    • @artemshumeiko
      @artemshumeiko  8 месяцев назад

      pip install greenlet, надеюсь, поможет

    • @Fair-Wez
      @Fair-Wez 8 месяцев назад

      Спасибо, исправил через expire_on_commit=False

  • @dimuha82
    @dimuha82 10 месяцев назад +2

    "Почему не dataclass'ы скажу в конце видео". Не сказал...

    • @dmitry-lz1ny
      @dmitry-lz1ny 9 месяцев назад

      Действительно.
      Используя пайдантик между слоями мы намертво скрепляемся с ним. Между слоями конечно лучше датакласы гонять, но тогда писать придется ещё больше кода.
      Получается нужны схема, датакласс и модель.

  • @max_z0rn
    @max_z0rn Год назад +1

    Байт на комментарии про белую тему ide

    • @yarko6734
      @yarko6734 Год назад +1

      Белая тема это причина по которой программисты выгорают

  • @ez9723
    @ez9723 10 месяцев назад

    Если вы вместо id: int используете UUID, а в ДТО хотите str и ловите ошибку приведения, то мне помогло такое
    from uuid import UUID
    class WorkerDTO(WorkerAddDTO):
    id: UUID
    @field_validator("id")
    def validate_uuids(cls, value):
    if value:
    return str(value)
    return value

  • @Александр-ъ3о1щ
    @Александр-ъ3о1щ Год назад +2

    Кто ловит такую же ошибку? Код полностью идентичен с репозиторием
    pydantic_core._pydantic_core.ValidationError: 2 validation errors for WorkersRelDTO
    resumes.0.workload
    Input should be 'parttime' or 'fulltime' [type=enum, input_value=, input_type=Workload]
    resumes.1.workload
    Input should be 'parttime' or 'fulltime' [type=enum, input_value=, input_type=Workload]

    • @Александр-ъ3о1щ
      @Александр-ъ3о1щ Год назад +1

      Победил через внесение параметра str в Enum'е:
      class Workload(str, enum.Enum):
      parttime = "parttime"
      fulltime = "fulltime
      без str почему-то не работало..