Zum Inhalt

Pydantisch

CI Coverage
pypi CondaForge downloads
license

.

Pydantic ist die am häufigsten verwendete Datenvalidierungsbibliothek für Python.

Pydantic ist schnell und erweiterbar und funktioniert gut mit Ihren Linters/IDE/Gehirn. Definieren Sie, wie Daten in reinem, kanonischem Python 3.8+ sein sollen; Validieren Sie es mit Pydantic.

!!! Erfolg „Migration zu Pydantic V2“ Verwenden Sie Pydantic V1? Hinweise zum Upgrade auf Pydantic V2 in Ihren Anwendungen finden Sie im Migrationsleitfaden!

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)

!!! Frage „Warum heißt Pydantic so?“

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 😉.

Warum Pydantic verwenden?

  • Unterstützt durch Typhinweise – bei Pydantic werden Schemavalidierung und Serialisierung durch Typanmerkungen gesteuert; weniger zu lernen, weniger Code zu schreiben und Integration mit Ihrer IDE und statischen Analysetools. Erfahren Sie mehr…
  • Geschwindigkeit – Die zentrale Validierungslogik von Pydantic ist in Rust geschrieben. Damit gehört Pydantic zu den schnellsten Datenvalidierungsbibliotheken für Python. Erfahren Sie mehr…
  • JSON-Schema – Pydantic-Modelle können JSON-Schema ausgeben, was eine einfache Integration mit anderen Tools ermöglicht. Erfahren Sie mehr…
  • Strikter und laxer Modus – Pydantic kann entweder im Modus „Strict=True“ (in dem Daten nicht konvertiert werden) oder im Modus „Strict=False“ ausgeführt werden, in dem Pydantic versucht, die Daten gegebenenfalls in den richtigen Typ umzuwandeln. Erfahren Sie mehr…
  • Datenklassen, TypedDicts und mehr – Pydantic unterstützt die Validierung vieler Standardbibliothekstypen, einschließlich Dataclass und TypedDict. Erfahren Sie mehr…
  • Anpassung – Pydantic ermöglicht benutzerdefinierten Validatoren und Serialisierern, die Art und Weise, wie Daten verarbeitet werden, auf viele leistungsstarke Arten zu ändern. Erfahren Sie mehr…
  • Ökosystem – rund 8.000 Pakete auf PyPI verwenden Pydantic, darunter äußerst beliebte Bibliotheken wie FastAPI, Huggingface, Django Ninja, SQLModel und LangChain. Erfahren Sie mehr…
  • Kampferprobt – Pydantic wird über 70 Millionen Mal pro Monat heruntergeladen und von allen FAANG-Unternehmen und 20 der 25 größten Unternehmen an der NASDAQ verwendet. Wenn Sie versuchen, etwas mit Pydantic zu machen, hat es wahrscheinlich schon jemand anderes gemacht. Erfahren Sie mehr…

Die Installation von Pydantic ist so einfach wie: pip install pydantic

Pydantische Beispiele

Um Pydantic bei der Arbeit zu sehen, beginnen wir mit einem einfachen Beispiel: Erstellen einer benutzerdefinierten Klasse, die von BaseModel erbt:

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 ist vom Typ int; Die Nur-Annotation-Deklaration teilt Pydantic mit, dass dieses Feld erforderlich ist. Strings, Bytes oder Floats werden nach Möglichkeit in Ints umgewandelt; andernfalls wird eine Ausnahme ausgelöst.
  2. Name ist eine Zeichenfolge; Da es einen Standardwert hat, ist es nicht erforderlich.
  3. signup_ts ist ein erforderliches Datum/Uhrzeit-Feld, es kann jedoch der Wert „None“ angegeben werden. Pydantic verarbeitet entweder einen Unix-Zeitstempel int (z. B. 1496498400) oder eine Zeichenfolge, die Datum und Uhrzeit darstellt.
  4. tastes ist ein Wörterbuch mit Zeichenfolgenschlüsseln und positiven Ganzzahlwerten. Der Typ PositiveInt ist eine Abkürzung für Annotated[int, annotated_types.Gt(0)] .
  5. Die Eingabe hier ist ein ISO8601-formatiertes Datum/Uhrzeit-Objekt. Pydantic konvertiert es in ein Datum/Uhrzeit-Objekt.
  6. Der Schlüssel hier sind Bytes, aber Pydantic kümmert sich darum, ihn in einen String umzuwandeln.
  7. In ähnlicher Weise wandelt Pydantic die Zeichenfolge „1“ in eine Ganzzahl 1 um.
  8. Hier erstellen wir eine Instanz von User, indem wir unsere externen Daten als Schlüsselwortargumente an User übergeben
  9. Wir können auf Felder als Attribute des Modells zugreifen
  10. Wir können das Modell mit model_dump() in ein Wörterbuch konvertieren

Wenn die Validierung fehlschlägt, gibt Pydantic einen Fehler mit einer Aufschlüsselung des Fehlers aus:

# 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. Die Eingabedaten sind hier falsch – id ist keine gültige Ganzzahl und signup_ts fehlt
  2. User(...) löst einen ValidationError mit einer Liste von Fehlern aus

Wer nutzt Pydantic?

Hunderte von Organisationen und Paketen nutzen Pydantic. Zu den führenden Unternehmen und Organisationen auf der ganzen Welt, die Pydantic nutzen, gehören:

Eine umfassendere Liste von Open-Source-Projekten, die Pydantic verwenden, finden Sie unter Liste der Abhängigkeiten auf Github, oder Sie können einige tolle Projekte mit Pydantic in awesome-pydantic finden.


本文总阅读量