Ga naar inhoud

Pydantisch

CI Coverage
pypi CondaForge downloads
license

.

Pydantic is de meest gebruikte gegevensvalidatiebibliotheek voor Python.

Snel en uitbreidbaar, Pydantic speelt mooi met uw linters/IDE/hersenen. Definieer hoe data eruit moeten zien in pure, canonieke Python 3.8+; valideer het met Pydantic.

!!! succes "Migreren naar Pydantic V2" Pydantic V1 gebruiken? Zie de Migratiegids voor opmerkingen over het upgraden naar Pydantic V2 in uw applicaties!

from datetime import datetime
from typing import Tuple

from pydantic import BaseModel


class Delivery(BaseModel):
    timestamp: datetime
    dimensions: Tuple[int, int]


m = 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)

Waarom wordt Pydantic genoemd zoals het is?

The name "Pydantic" is a portmanteau of "Py" and "pedantic." The "Py" part indicates that the library is associated with Python, and "pedantic" refers to the library's meticulous approach to data validation and type enforcement.

Combining these elements, "Pydantic" describes our Python library that provides detail-oriented, rigorous data validation.

We’re aware of the irony that Pydantic V1 was not strict in its validation, so if we're being pedantic, "Pydantic" was a misnomer until V2 😉.

Waarom Pydantic gebruiken?

  • Mogelijk gemaakt door typehints: met Pydantic worden schemavalidatie en serialisatie beheerd door typeannotaties; u hoeft minder te leren, minder code te schrijven en integratie met uw IDE- en statische analysetools. Meer informatie…
  • Snelheid — De kernvalidatielogica van Pydantic is geschreven in Rust. Als gevolg hiervan behoort Pydantic tot de snelste gegevensvalidatiebibliotheken voor Python. Meer informatie…
  • JSON-schema — Pydantic-modellen kunnen JSON-schema uitzenden, waardoor eenvoudige integratie met andere tools mogelijk is. Meer informatie…
  • Strenge en lakse modus — Pydantic kan in de modus strict=True (waar gegevens niet worden geconverteerd) of in de modus strict=False worden uitgevoerd, waarbij Pydantic waar nodig probeert gegevens naar het juiste type te dwingen. Meer informatie…
  • Dataclasses, TypedDicts en meer — Pydantic ondersteunt validatie van veel standaard bibliotheektypen, waaronder dataclass en TypedDict. Meer informatie…
  • Maatwerk – Met Pydantic kunnen aangepaste validators en serializers de manier waarop gegevens worden verwerkt op veel krachtige manieren wijzigen. Meer informatie…
  • Ecosysteem — ongeveer 8.000 pakketten op PyPI gebruiken Pydantic, inclusief enorm populaire bibliotheken zoals FastAPI, knuffelgezicht, Django Ninja, SQLModel en LangChain. Meer informatie…
  • Gevechtstest — Pydantic wordt meer dan 70 miljoen keer per maand gedownload en wordt gebruikt door alle FAANG-bedrijven en 20 van de 25 grootste bedrijven op NASDAQ. Als u iets met Pydantic probeert te doen, heeft iemand anders dit waarschijnlijk al gedaan. Meer informatie…

Pydantic installeren is zo eenvoudig als: pip install pydantic

Pydantische voorbeelden

Om Pydantic aan het werk te zien, beginnen we met een eenvoudig voorbeeld, waarbij we een aangepaste klasse maken die overerft van BaseModel:

from datetime import datetime

from pydantic import BaseModel, PositiveInt


class User(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)!
#> 123
print(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 van het type int; de annotatie-only declaratie vertelt Pydantic dat dit veld verplicht is. Strings, bytes of floats worden indien mogelijk tot ints gedwongen; anders wordt er een uitzondering gemaakt.
  2. naam is een tekenreeks; omdat het een standaardwaarde heeft, is dit niet vereist.
  3. signup_ts is een datum/tijd-veld dat vereist is, maar de waarde Geen mag worden opgegeven; Pydantic verwerkt een unix-tijdstempel int (bijvoorbeeld 1496498400) of een string die de datum en tijd vertegenwoordigt.
  4. smaken is een woordenboek met tekenreekssleutels en positieve gehele waarden. Het PositiveInt-type is een afkorting voor Annotated[int, annotated_types.Gt(0)] .
  5. De invoer hier is een ISO8601-geformatteerde datetime, Pydantic zal deze converteren naar een datetime-object.
  6. De sleutel hier is bytes, maar Pydantic zorgt ervoor dat het tot een string wordt gedwongen.
  7. Op dezelfde manier zal Pydantic de string '1' dwingen tot een geheel getal 1.
  8. Hier maken we een exemplaar van Gebruiker door onze externe gegevens als trefwoordargumenten door te geven aan Gebruiker
  9. We hebben toegang tot velden als attributen van het model
  10. We kunnen het model naar een woordenboek converteren met model_dump()

Als de validatie mislukt, zal Pydantic een foutmelding genereren met een overzicht van wat er mis was:

# continuing the above example...

from pydantic import ValidationError


class User(BaseModel):
    id: int
    name: str = 'John Doe'
    signup_ts: datetime | None
    tastes: dict[str, PositiveInt]


external_data = {'id': 'not an int', 'tastes': {}}  # (1)!

try:
    User(**external_data)  # (2)!
except ValidationError as e:
    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. De invoergegevens zijn hier verkeerd: id is geen geldig geheel getal en signup_ts ontbreekt
  2. User(...) zal een ValidationError genereren met een lijst met fouten

Wie gebruikt Pydantic?

Honderden organisaties en pakketten maken gebruik van Pydantic. Enkele van de prominente bedrijven en organisaties over de hele wereld die Pydantic gebruiken, zijn onder meer:

Voor een uitgebreidere lijst van open-sourceprojecten die Pydantic gebruiken, zie de lijst met afhankelijke personen op github, of je kunt een aantal geweldige projecten vinden met Pydantic in awesome-pydantic.


本文总阅读量