💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gwP 💡 Забирай роадмап изучения самого востребованного фреймворка на Python - FastAPI здесь: t.me/ArtemShumeikoBot
@artemshumeiko, подскажи, пожалуйста, а как конвертировать наоборот в БД модель? Ну либо наведи хотя бы где это искать. В доках пайдентика чет не нашел...
Планируешь ли ты создать курс по SQLAlchemy с задачами на Stepik? Я думаю, что такой курс был бы очень полезен, учитывая твой подход к обучению и отсутствия такого курса на просторах и-нета . И, вероятно, не только я столкнулся с нехваткой руконабивательных материалов по этой теме.
А если у нас 2 файла со схемами. Первый юзер, а 2 резюме. Получается, что юзеру нужен класс резюме, а резюме класс юзера. Вот уже циклический импорт. Если не импортировать класс, то "UserDTO" не работает. Только если оба в 1 файл засунуть, только тогда они будут работать. В той же алхимии Mapped[] позволяет не указывать явный импорт класса.
импортировать не нужно просто в кавычках указываем название модели Да, PyCharm будет ругаться. Если хочется, чтобы IDE не ругался, импортировать нужно через if TYPE_CHECKING: import UserDTO
Делал всегда таким образом: response = db.execute(запрос) scalar = response.scalar() return МодельPydantic(**scalar.__dict__) Такой вариант может быть правильным?
Действительно. Используя пайдантик между слоями мы намертво скрепляемся с ним. Между слоями конечно лучше датакласы гонять, но тогда писать придется ещё больше кода. Получается нужны схема, датакласс и модель.
Если вы вместо 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
Кто ловит такую же ошибку? Код полностью идентичен с репозиторием 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]
Победил через внесение параметра str в Enum'е: class Workload(str, enum.Enum): parttime = "parttime" fulltime = "fulltime без str почему-то не работало..
💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gwP 💡
Забирай роадмап изучения самого востребованного фреймворка на Python - FastAPI здесь: t.me/ArtemShumeikoBot
Тебя приятно слушать, продолжай делать полезные видосы. Спасибо
Спасибо 😉
Наконец-то! Наконец-то я узнала, как расшифровать DTO) вокруг все употребляют, но объяснить не могут))
Замечательный курс! Но этого урока нет в плейлисте!
Добавил
Спасибо
Искал медь, а нашел золото. Прекрасная серия уроков!
Артем, не планируете сделать курс по pydantic? В хорошем исполнении вообще ничего нет
@artemshumeiko, подскажи, пожалуйста, а как конвертировать наоборот в БД модель? Ну либо наведи хотя бы где это искать. В доках пайдентика чет не нашел...
Планируешь ли ты создать курс по SQLAlchemy с задачами на Stepik? Я думаю, что такой курс был бы очень полезен, учитывая твой подход к обучению и отсутствия такого курса на просторах и-нета . И, вероятно, не только я столкнулся с нехваткой руконабивательных материалов по этой теме.
да, планирую ;)
А если у нас 2 файла со схемами. Первый юзер, а 2 резюме.
Получается, что юзеру нужен класс резюме, а резюме класс юзера. Вот уже циклический импорт. Если не импортировать класс, то "UserDTO" не работает.
Только если оба в 1 файл засунуть, только тогда они будут работать.
В той же алхимии Mapped[] позволяет не указывать явный импорт класса.
импортировать не нужно
просто в кавычках указываем название модели
Да, PyCharm будет ругаться.
Если хочется, чтобы IDE не ругался, импортировать нужно через if TYPE_CHECKING: import UserDTO
используй from typing import TYPE_CHECKING
if TYPE_CHECKING:
from models.user_models import User
а dataclass как сериализовать из модели?
Делал всегда таким образом:
response = db.execute(запрос)
scalar = response.scalar()
return МодельPydantic(**scalar.__dict__)
Такой вариант может быть правильным?
да, хороший вариант
можно еще так: ModelPydantic.model_validate(scalar, from_attributes=True)
Что-то в асинхронной версии не идет 🤔MissingGreenlet
pip install greenlet, надеюсь, поможет
Спасибо, исправил через expire_on_commit=False
"Почему не dataclass'ы скажу в конце видео". Не сказал...
Действительно.
Используя пайдантик между слоями мы намертво скрепляемся с ним. Между слоями конечно лучше датакласы гонять, но тогда писать придется ещё больше кода.
Получается нужны схема, датакласс и модель.
Байт на комментарии про белую тему ide
Белая тема это причина по которой программисты выгорают
Если вы вместо 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
Кто ловит такую же ошибку? Код полностью идентичен с репозиторием
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]
Победил через внесение параметра str в Enum'е:
class Workload(str, enum.Enum):
parttime = "parttime"
fulltime = "fulltime
без str почему-то не работало..