Для чего используется библиотека Pydantic и каковы ее ключевые возможности

«Для чего используется библиотека Pydantic и каковы ее ключевые возможности» — вопрос из категории Библиотеки и модули, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Pydantic — это библиотека для валидации данных и управления настройками с использованием аннотаций типов Python. Она обеспечивает строгую проверку типов и структуры данных во время выполнения программы.

Ключевые возможности:

  • Валидация данных: Автоматически проверяет, соответствуют ли входящие данные (например, из JSON-запроса) типам, указанным в модели.
  • Парсинг и приведение типов: Умеет преобразовывать данные в нужные типы (например, строку '2023-01-01' в объект datetime).
  • Сериализация: Легко преобразует объекты моделей в словари или JSON.
  • Генерация JSON Schema: Автоматически создает схемы данных, которые используются для генерации документации API (например, в FastAPI).
  • Кастомные валидаторы: Позволяет определять собственные функции для сложной логики проверки полей.

Пример базовой модели:

from pydantic import BaseModel, EmailStr, PositiveInt, field_validator
from typing import List

class User(BaseModel):
    id: PositiveInt
    name: str
    email: EmailStr
    tags: List[str] = []

    # Кастомный валидатор
    @field_validator('name')
    def name_must_contain_space(cls, v):
        if ' ' not in v:
            raise ValueError('must contain a space')
        return v.title()

# Создание экземпляра с валидацией
try:
    user_data = {"id": 123, "name": "john doe", "email": "john.doe@example.com"}
    user = User(**user_data)

    # Сериализация в JSON
    print(user.model_dump_json(indent=2))
except ValueError as e:
    print(e)

Основные сценарии использования:

  • API: Валидация тел запросов и ответов (основа FastAPI).
  • Управление конфигурацией: Загрузка и валидация настроек из файлов или переменных окружения.
  • ETL-процессы: Обеспечение корректности данных на этапах извлечения и преобразования.