Ответ
Pydantic — это библиотека для валидации, парсинга и сериализации данных в Python, основанная на аннотациях типов. Она гарантирует, что данные соответствуют заданной структуре (модели).
Основное назначение:
- Валидация данных: Проверка типов, форматов (email, URL) и ограничений (например,
min_length). - Парсинг и приведение типов (coercion): Автоматическое преобразование входных данных в нужные типы Python (например, строки
"123"вint). - Сериализация: Преобразование моделей Pydantic в словари или JSON.
- Управление настройками: Загрузка конфигурации приложения из переменных окружения.
Поддерживаемые типы данных:
Pydantic работает с большинством стандартных типов Python:
- Примитивные типы:
int,float,str,bool,bytes. - Сложные типы:
List,Dict,Tuple,Set,Enum. - Типы из стандартной библиотеки:
datetime,date,UUID,Path. - Вложенные модели: Поля могут быть другими моделями Pydantic.
- Опциональные типы:
Optional[T]илиUnion[T, None].
Пример валидации и парсинга
from pydantic import BaseModel, ValidationError, Field
from typing import List
class User(BaseModel):
id: int
name: str = Field(..., min_length=2)
tags: List[str] = []
# 1. Успешная валидация с приведением типов
# 'id' будет преобразован из строки в int
data_valid = {"id": "123", "name": "Alice", "tags": ["admin", "dev"]}
user = User(**data_valid)
print(user.model_dump_json(indent=2))
# Вывод:
# {
# "id": 123,
# "name": "Alice",
# "tags": [
# "admin",
# "dev"
# ]
# }
# 2. Ошибка валидации
data_invalid = {"id": "abc", "name": "B"} # id - не число, name - слишком короткое
try:
User(**data_invalid)
except ValidationError as e:
print(e)
# Вывод:
# 2 validation errors for User
# id
# Input should be a valid integer, unable to parse string as an integer [type=int_parsing, ...]
# name
# String should have at least 2 characters [type=string_too_short, ...]