100% Free Forever
AI-Powered Learning
Industry Expert Content
Certificates & Badges
Learn At Your Own Pace

Python Pydantic Cheat Sheet

Python Pydantic Cheat Sheet

Defining BaseModel schemas, validators, field constraints, and serialization with Pydantic v2 for runtime data validation and settings.

2 PagesIntermediateFeb 12, 2026

Basic Models

Define fields with type hints; Pydantic validates and coerces on construction.

python
from pydantic import BaseModel, Fieldfrom typing import Optionalfrom datetime import datetimeclass User(BaseModel):    id: int    name: str    email: str    signup_date: datetime = Field(default_factory=datetime.utcnow)    bio: Optional[str] = Noneuser = User(id=1, name="Alice", email="a@example.com")print(user.model_dump())        # dictprint(user.model_dump_json())   # JSON string

Field & Model Validators (v2)

field_validator and model_validator replace v1's @validator/@root_validator.

python
from pydantic import BaseModel, field_validator, model_validatorclass SignupForm(BaseModel):    password: str    confirm_password: str    @field_validator("password")    @classmethod    def password_min_length(cls, v: str) -> str:        if len(v) < 8:            raise ValueError("password must be at least 8 characters")        return v    @model_validator(mode="after")    def passwords_match(self):        if self.password != self.confirm_password:            raise ValueError("passwords do not match")        return self

Field Constraints & Config

Constrain values inline and configure model-wide behavior.

python
from pydantic import BaseModel, Field, ConfigDictclass Product(BaseModel):    model_config = ConfigDict(str_strip_whitespace=True, extra="forbid")    name: str = Field(min_length=1, max_length=100)    price: float = Field(gt=0, description="Price in USD")    quantity: int = Field(ge=0, default=0)    tags: list[str] = Field(default_factory=list, max_length=10)# extra="forbid" rejects unknown fields at construction time

Settings Management

pydantic-settings reads env vars / .env files into a typed model.

python
from pydantic_settings import BaseSettings, SettingsConfigDictclass Settings(BaseSettings):    model_config = SettingsConfigDict(env_file=".env", env_prefix="APP_")    debug: bool = False    database_url: str    max_connections: int = 10settings = Settings()  # reads APP_DEBUG, APP_DATABASE_URL, etc.

Error Handling & Types

Common patterns for catching and inspecting validation errors.

  • ValidationError- raised on construction; e.errors() gives structured error list
  • model_validate(obj)- validate a dict/object into a model instance
  • model_validate_json(s)- validate directly from a JSON string
  • TypeAdapter- validate non-BaseModel types like list[int] or dict[str, User]
  • StrictStr / StrictInt- disable type coercion for a field (no '5' -> 5)
  • Annotated[str, Field(...)]- preferred way to attach constraints in v2
Pro Tip

Use model_config = ConfigDict(extra='forbid') on any model that parses external input (API request bodies, config files) — silently ignoring unexpected fields hides typos and API drift that you'd otherwise catch immediately.

Was this cheat sheet helpful?

Explore Topics

#PythonPydantic#PythonPydanticCheatSheet#Programming#Intermediate#BasicModels#FieldModelValidatorsV2#FieldConstraintsConfig#SettingsManagement#CheatSheet#SkillVeris