Movatterモバイル変換


[0]ホーム

URL:


Skip to content
What's new — we've launchedPydantic Logfire🔥to help you monitor and understand yourPydantic validations.

Pydantic

CICoverage
pypiCondaForgedownloads
licensellms.txt

Documentation for version:v2.11.1.

Pydantic is the most widely used data validation library for Python.

Fast and extensible, Pydantic plays nicely with your linters/IDE/brain. Define how data should be in pure, canonical Python 3.9+; validate it with Pydantic.

Monitor Pydantic with Logfire🔥

Built by the same team as Pydantic,Logfire is an application monitoring tool that is as simple to use and powerful as Pydantic itself.

Logfire integrates with many popular Python libraries including FastAPI, OpenAI and Pydantic itself, so you can use Logfire to monitor Pydantic validations and understand why some inputs fail validation:

Monitoring Pydantic with Logfire
fromdatetimeimportdatetimeimportlogfirefrompydanticimportBaseModellogfire.configure()logfire.instrument_pydantic()# (1)!classDelivery(BaseModel):timestamp:datetimedimensions:tuple[int,int]# this will record details of a successful validation to logfirem=Delivery(timestamp='2020-01-02T03:04:05Z',dimensions=['10','20'])print(repr(m.timestamp))#> datetime.datetime(2020, 1, 2, 3, 4, 5, tzinfo=TzInfo(UTC))print(m.dimensions)#> (10, 20)Delivery(timestamp='2020-01-02T03:04:05Z',dimensions=['10'])# (2)!
  1. Set logfire record all both successful and failed validations, userecord='failure' to only record failed validations,learn more.
  2. This will raise aValidationError since there are too fewdimensions, details of the input data and validation errors will be recorded in Logfire.

Would give you a view like this in the Logfire platform:

Logfire Pydantic Integration

This is just a toy example, but hopefully makes clear the potential value of instrumenting a more complex application.

Learn more about Pydantic Logfire

Why use Pydantic?

  • Powered by type hints — with Pydantic, schema validation and serialization are controlled by type annotations; less to learn, less code to write, and integration with your IDE and static analysis tools.Learn more…
  • Speed — Pydantic's core validation logic is written in Rust. As a result, Pydantic is among the fastest data validation libraries for Python.Learn more…
  • JSON Schema — Pydantic models can emit JSON Schema, allowing for easy integration with other tools.Learn more…
  • Strict andLax mode — Pydantic can run in either strict mode (where data is not converted) or lax mode where Pydantic tries to coerce data to the correct type where appropriate.Learn more…
  • Dataclasses,TypedDicts and more — Pydantic supports validation of many standard library types includingdataclass andTypedDict.Learn more…
  • Customisation — Pydantic allows custom validators and serializers to alter how data is processed in many powerful ways.Learn more…
  • Ecosystem — around 8,000 packages on PyPI use Pydantic, including massively popular libraries likeFastAPI,huggingface,Django Ninja,SQLModel, &LangChain.Learn more…
  • Battle tested — Pydantic is downloaded over 70M times/month and is used by all FAANG companies and 20 of the 25 largest companies on NASDAQ. If you're trying to do something with Pydantic, someone else has probably already done it.Learn more…

Installing Pydantic is as simple as:pip install pydantic

Pydantic examples

To see Pydantic at work, let's start with a simple example, creating a custom class that inherits fromBaseModel:

Validation Successful
fromdatetimeimportdatetimefrompydanticimportBaseModel,PositiveIntclassUser(BaseModel):id:int# (1)!name:str='John Doe'# (2)!signup_ts:datetime|None# (3)!tastes:dict[str,PositiveInt]# (4)!external_data={'id':123,'signup_ts':'2019-06-01 12:22',# (5)!'tastes':{'wine':9,b'cheese':7,# (6)!'cabbage':'1',# (7)!},}user=User(**external_data)# (8)!print(user.id)# (9)!#> 123print(user.model_dump())# (10)!"""{    'id': 123,    'name': 'John Doe',    'signup_ts': datetime.datetime(2019, 6, 1, 12, 22),    'tastes': {'wine': 9, 'cheese': 7, 'cabbage': 1},}"""
  1. id is of typeint; the annotation-only declaration tells Pydantic that this field is required. Strings, bytes, or floats will be coerced to integers if possible; otherwise an exception will be raised.
  2. name is a string; because it has a default, it is not required.
  3. signup_ts is adatetime field that is required, but the valueNone may be provided; Pydantic will process either aUnix timestamp integer (e.g.1496498400) or a string representing the date and time.
  4. tastes is a dictionary with string keys and positive integer values. ThePositiveInt type is shorthand forAnnotated[int, annotated_types.Gt(0)].
  5. The input here is anISO 8601 formatted datetime, but Pydantic will convert it to adatetime object.
  6. The key here isbytes, but Pydantic will take care of coercing it to a string.
  7. Similarly, Pydantic will coerce the string'1' to the integer1.
  8. We create instance ofUser by passing our external data toUser as keyword arguments.
  9. We can access fields as attributes of the model.
  10. We can convert the model to a dictionary withmodel_dump().

If validation fails, Pydantic will raise an error with a breakdown of what was wrong:

Validation Error
# continuing the above example...fromdatetimeimportdatetimefrompydanticimportBaseModel,PositiveInt,ValidationErrorclassUser(BaseModel):id:intname:str='John Doe'signup_ts:datetime|Nonetastes:dict[str,PositiveInt]external_data={'id':'not an int','tastes':{}}# (1)!try:User(**external_data)# (2)!exceptValidationErrorase:print(e.errors())"""    [        {            'type': 'int_parsing',            'loc': ('id',),            'msg': 'Input should be a valid integer, unable to parse string as an integer',            'input': 'not an int',            'url': 'https://errors.pydantic.dev/2/v/int_parsing',        },        {            'type': 'missing',            'loc': ('signup_ts',),            'msg': 'Field required',            'input': {'id': 'not an int', 'tastes': {}},            'url': 'https://errors.pydantic.dev/2/v/missing',        },    ]    """
  1. The input data is wrong here —id is not a valid integer, andsignup_ts is missing.
  2. Trying to instantiateUser will raise aValidationError with a list of errors.

Who is using Pydantic?

Hundreds of organisations and packages are using Pydantic. Some of the prominent companies and organizations around the world who are using Pydantic include:

Adobe
Amazon and AWS
Anthropic
Apple
ASML
AstraZeneca
Cisco Systems
Comcast
Datadog
Facebook
GitHub
Google
HSBC
IBM
Intel
Intuit
Intergovernmental Panel on Climate Change
JPMorgan
Jupyter
Microsoft
Molecular Science Software Institute
NASA
Netflix
NSA
NVIDIA
OpenAI
Oracle
Palantir
Qualcomm
Red Hat
Revolut
Robusta
Salesforce
Starbucks
Texas Instruments
Twilio
Twitter
UK Home Office

For a more comprehensive list of open-source projects using Pydantic see thelist of dependents on github, or you can find some awesome projects using Pydantic inawesome-pydantic.


[8]ページ先頭

©2009-2025 Movatter.jp