Pydantic
Also Known As
Pydantic V2
BaseModel
data validation
TL;DR
A Python library for data validation using type annotations — defining models as classes with typed fields that validate and coerce input data at runtime.
Explanation
Pydantic V2 (Rust-powered) validates data against type-annotated models. Fields support validators, default values, aliases, and computed properties. BaseModel parses and validates on instantiation — invalid data raises ValidationError with detailed field-level errors. Pydantic is the foundation of FastAPI and is widely used for settings management (BaseSettings), API request/response models, and data pipeline validation.
Common Misconception
✗ Pydantic is only for FastAPI — it is a standalone validation library useful anywhere you need type-safe data parsing: CLI tools, ETL pipelines, settings management.
Why It Matters
Pydantic replaces dozens of manual isinstance() checks with a declarative model definition — invalid data raises a descriptive ValidationError with field paths instead of cryptic AttributeError later.
Common Mistakes
- Using Pydantic V1 patterns in V2 — @validator is replaced by @field_validator, class Config by model_config.
- Not using model.model_dump() (V2) vs dict() (V1) — API has changed between versions.
- Expecting Pydantic to validate output, not just input — validation happens at parse time; mutating fields after construction bypasses validators.
- Not using model_config = ConfigDict(strict=True) when coercion should be forbidden — Pydantic coerces '42' to int by default.
Code Examples
✗ Vulnerable
# Manual validation — verbose and easy to miss:
def create_user(data: dict) -> dict:
if not isinstance(data.get('email'), str) or '@' not in data['email']:
raise ValueError('Invalid email')
if not isinstance(data.get('age'), int) or data['age'] < 0:
raise ValueError('Invalid age')
return {'email': data['email'], 'age': data['age']}
✓ Fixed
from pydantic import BaseModel, EmailStr, Field
class CreateUserRequest(BaseModel):
email: EmailStr
age: int = Field(ge=0, le=150)
name: str = Field(min_length=1, max_length=100)
# Usage:
try:
user = CreateUserRequest(**request_data) # Validates and coerces
except ValidationError as e:
print(e.errors()) # Detailed field-level errors
References
Tags
🤝 Adopt this term
£79/year · your link shown here
Added
15 Mar 2026
Edited
22 Mar 2026
Views
22
🤖 AI Guestbook educational data only
|
|
Last 30 days
Agents 0
No pings yet today
No pings yesterday
Amazonbot 6
Perplexity 5
Unknown AI 4
Ahrefs 2
Google 2
ChatGPT 1
Also referenced
How they use it
crawler 18
crawler_json 1
pre-tracking 1
Related categories
⚡
DEV INTEL
Tools & Severity
🟡 Medium
⚙ Fix effort: Medium
⚡ Quick Fix
Use Pydantic v2 for data validation at API boundaries — it validates and coerces types at runtime using Python type annotations, the equivalent of PHP's constructor-validated value objects
📦 Applies To
python 3.8
web
cli
🔗 Prerequisites
🔍 Detection Hints
Manual isinstance() validation in API handler; dict access without validation; no runtime type checking at API boundaries
Auto-detectable:
✓ Yes
mypy
pylint
ruff
⚠ Related Problems
🤖 AI Agent
Confidence: Medium
False Positives: Low
✗ Manual fix
Fix: Medium
Context: File
Tests: Update