All streams
Search
Write a publication
Pull to refresh
95
24
Алексей Яковенко @yakvenalex

Опытный python разработчик с многолетним стажем.

Send message

Спасибо за обратную связь. Что касается этой связки - смотрите в моем профиле. Там есть цикл публикаций про FastApi в которых я рассматриваю эту связку

Вопрос привычки. Новое название технологии MiniApp. WebApp - это старое название технологии. Не обязательно читать за раз. На фоне других моих публикаций эта статья не огромная.

pydantic-settigs - это сейчас отдельная библиотека. Поэтому не включал. Что касается model_config, вроде же в статье давал описание что так уже не используется?

Ниже кусок из статьи.

Конфигурация моделей в Pydantic 2

В Pydantic 2 конфигурация моделей теперь задаётся через ConfigDict, а не через старый формат с классом Config. Это важное изменение, которое упрощает настройку и делает её более гибкой.

Вместо того чтобы писать:

class MyModel(BaseModel):
    class Config:
      from_attributes = True

теперь используем ConfigDict:

from pydantic import BaseModel, ConfigDict

class MyModel(BaseModel):
    model_config = ConfigDict(from_attributes=True)

По поводу рут-моделей так-же писал. Теперь это model_validate. Посмотрите внимательнее)

Валидатор модели (model_validator) в Pydantic

В старых версиях Pydantic этот декоратор назывался root_validator. Его основное назначение — валидация модели в целом, после того как все поля уже прошли индивидуальную проверку. Это позволяет выполнять комплексные проверки, зависящие от нескольких полей модели одновременно.

Это тоже из статьи)

1. метод .from_orm считается deprecated, необходимо использовать .model_validate(obj_from_db, from_attributes=True)

В статье про Pydantic (самой новой) описывал это.

2. .dict() также считается deprecated, преобразование pydantic модели в dict лучше производить через .model_dump(), там есть удобные параметры типа by_alias, которые дают гибкость к сериализации данных

Та же история. В статье про Pydantic 2 описывал.

Спасибо за обратную связь. Возможно в дальнейшем. Хорошая технология

Спасибо за обратную связь. Вы своей реализацией уже решили эту проблему.

Mapped[list["User"] | None]

Проблема была бы при такой записи

Mapped[list[User] | None]

Основные методы для работы с результатами запроса

1) scalars()

Метод scalars() используется, когда мы ожидаем получить одну колонку результата, а не несколько полей. Например, когда мы запрашиваем всю модель (как в нашем случае) или одно конкретное поле (например, только имена пользователей).

И далее по тексту)

Спасибо за обратную связь. Возможно просто неграмотно пишу) Казалось что так правильно. По поводу echo планирую в следующей статье описать вывод кастомный под логирование с параметрами. echo перегружает консоль

Я не понимаю почему мой метод ошибочен? Востановил баланс несправедливой оценки. Неправильно вас понял)

Во-первых не name, а value. Во-вторых вы не правы. Такая запись как вы предложили вызовет ошибку. Для получения данных нам ничего не будет мешать использовать конструкцию ProfessionEnum.WRITER.value, но в качестве описания ENUM через Mapped такой подход вызовет ошибку.

Или, чтоб не заморачиваться, можно описать Pydantic модель, которая автоматически вернет значение.

class ProfilePydantic(BaseModel):
    first_name: str
    last_name: str | None
    age: int | None
    gender: GenderEnum
    profession: ProfessionEnum
    interests: List[str] | None
    contacts: dict | None

    class Config:
        from_attributes = True
        use_enum_values = True

Спасибо за обратную связь. Вообще можно использовать ENUM из SQLAlchemy и там прописывать, но оно как-то странно работает и на Alembic параметр все равно не попадает. Так что я решил это дело на "ручное" управление вынести)

Эту тему плотно планирую рассмотреть в следующей статье. Что касается ограничений на стороне PostgreSQL - они снимаются достаточно просто. Суть алхимии в том, что при использовании питоновского кода появляется возможность генерировать сложные SQL запросы.

По вызову запосов асинхронно. Тут нужно хорошо разобраться в теме сессий и об этом я подробно расскажу в следующий раз)

Information

Rating
308-th
Location
Краснодар, Краснодарский край, Россия
Date of birth
Registered
Activity

Specialization

Specialist
From 200,000 ₽
SQL
Python
PostgreSQL