DEV Community

Ankit malik
Ankit malik

Posted on

What is Pydantic in python

Introduction

In Python, data validation and settings management are common challenges, especially when working with APIs, configuration files, or user inputs. While Python is a dynamically typed language, developers often need ways to ensure that data provided should be of expected types. This is where Pydantic comes into picture.

Pydantic is a data validation and parsing library that uses Python type annotations to validate structured data. Built on top of Python 3.6+ type hints, Pydantic provides automatic data validation and conversion, making it especially popular in FastAPI and other modern Python frameworks.

Why Use Pydantic

Here are some reasons why Pydantic is a go-to tool for developers:

  • Data Validation: Automatically validate input data using standard Python types.
  • Error Reporting: Provides clear, structured error messages when validation fails.
  • Performance: Pydantic is built using dataclasses and is extremely fast.
  • Type Coercion: Automatically converts compatible types (e.g., string to integer).
  • Integration: Plays well with modern Python frameworks like FastAPI, which uses it extensively for request and response validation.
  • Ease of Use: Leverages Python type hints, reducing the need for verbose validation logic.

Code Example

Here’s a simple example to demonstrate Pydantic in action:

from pydantic import BaseModel, ValidationError
from typing import List

class User(BaseModel):
    id: int
    name: str
    is_active: bool = True
    tags: List[str] = []

# Valid input
user_data = {
    'id': '123',  # Will be coerced to int
    'name': 'Alice',
    'tags': ['python', 'developer']
}

user = User(**user_data)
print(user)
print(user.model_dump())

# Invalid input
try:
    invalid_data = {'id': 'abc', 'name': 234}
    User(**invalid_data)
except ValidationError as e:
    print(e)



Enter fullscreen mode Exit fullscreen mode

Output:

id=123 name='Alice' is_active=True tags=['python', 'developer']
{'id': 123, 'name': 'Alice', 'is_active': True, 'tags': ['python', 'developer']}
2 validation errors for User
id
  Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='abc', input_type=str]
    For further information visit https://errors.pydantic.dev/2.11/v/int_parsing
name
  Input should be a valid string [type=string_type, input_value=234, input_type=int]
    For further information visit https://errors.pydantic.dev/2.11/v/string_type
Enter fullscreen mode Exit fullscreen mode

While both Pydantic and TypedDict from the typing module allow type annotations for dictionaries, they serve different purposes:

Feature Pydantic TypedDict
Validation Yes No
Default Values Yes Yes (in Python 3.9+)
Type Coercion Yes (e.g., str → int) No
Runtime Behavior Full-featured at runtime Mainly for static analysis
Error Reporting Detailed errors via exceptions None
Performance Slightly slower due to checks Faster (no runtime overhead)

Summary: Use TypedDict when you only need type hints for static checking (e.g., with mypy). Use Pydantic when you need runtime validation, coercion, and structured error handling.

Conclusion

Pydantic is a powerful and user-friendly library that brings the type-safe validation into dynamic Python code. It helps developers write cleaner, more maintainable code by enforcing data structure constraints and providing detailed feedback on invalid inputs. Whether you're building a REST API, working with external data sources, or managing configurations, Pydantic can be an essential part of your Python toolkit.

Top comments (0)