Как стать автором
Обновить

Pydantic 2: Полное руководство для Python-разработчиков — от основ до продвинутых техник

Время на прочтение26 мин
Количество просмотров49K
Всего голосов 32: ↑31 и ↓1+35
Комментарии12

Комментарии 12

Спасибо. Про sqlmodel того же автора что-нибудь написать не планируете?

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

Производительность увеличили, это да, но все равно разница производительности с валидацией и без может быть до 30 раз. А иногда валидация не нужна (когда доверенный источник данных), а функционал пайдантика хочется использовать, и приходится пилить свое, потому что возможности использовать пайдантик без напильника этих ситуациях никак

Здравствуйте, спасибо за статью, зацепился за несколько вещей.

class Config:

в моделях больше не используется, на смену пришел model_config

Не заметил примеров рут моделей (что может быть супер полезно при создании собственных валидаторов или типов

Ну и ждал примеров с сеттинг классами, пожалуй один из самых удобных способов работать с .env/variables на уровне приложений.

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. Его основное назначение — валидация модели в целом, после того как все поля уже прошли индивидуальную проверку. Это позволяет выполнять комплексные проверки, зависящие от нескольких полей модели одновременно.

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

Оки, про сеттинги подумал так как они были частью в v1 (причем довольно классной), решил упомянуть. Технически да, это отдельная библиотека.
По поводу примеров с ConfigDict - перечитал, увидел, Ваша правда, извиняйте :)
По рут моделям хотелось бы больше примеров для разных моментов (не только как валидация целостности модели, но и самостоятельного типа), в голову приходят сразу два примера:
- Описание схемы ответа от какого-то сервиса, который возвращает список с некими элементами. Встречал обходные пути для такого определения

class ServiceResponse(BaseModel):
    data: list[Element]

что в целом нормально, но приходится делать .data чтобы проиграть логику, вместо этого можно было бы просто сделать простой тип-список.

- Самостоятельный тип с дополнительной валидацией/сайд эффектом (то же можно сделать и филд валидаторами, но отдельный тип придает некую целостность)
Пример тут - тип для имени топика кафки (мы допускаем что все топики будут иметь префикс как имя окружения)

import os from typing import Annotated

from pydantic import AfterValidator

all = ("TopicName",)

def _apply_env_prefix(value: str) -> str: 
    return f"{os.environ['ENV_NAME']}.{value}"

TopicName = Annotated[str, AfterValidator(_apply_env_prefix)]


Не топлю что это "единственный верный" способ создавать подобные вещи, просто аргумента ради :)

Очень надеялся на этот туториал, но пока складывается впечатление, что pydantic полезен только при работе с ORM.

Хорошая и интересная статья. Легко и довольно понятно читается.

Интересно было бы почитать про pydantic в связке, например, pydantic, pydantic_settings и fastAPI.

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

Добрый день! Спасибо за материал! Хотел бы предложить вам, написать подобную статью о работе с Tortoise ORM, сравнить с SQLAlchemy и ее взаимодействие с FastAPI и Pydantic. Пробовал SQLAlchemy, слишком много повторяющегося кода, схем, по документации Tortoise он сам все генерирует и кода гораздо меньше. Еще раз спасибо за ваш материал!

Спасибо за обратную связь) По Алхимии есть такое решение, как SQLModel, которое закрывает проблемы с получением и работой с данными. Так что большого смысла не вижу отказываться от Алхимии. С Tortoise ORM знаком достаточно поверхностно. Поэтому, пока не могу выступать в роли эксперта тут)

Спасибо за статью, хотелось только добавить, что pydantic вместо regex предлагает использовать pattern (у меня версия 2.9.2):

pydantic.errors.PydanticUserError: 'regex' is removed. use 'pattern' instead

Зарегистрируйтесь на Хабре, чтобы оставить комментарий