> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squarecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Wie man Daten mit Pydantic validiert

> Lerne, wie du Daten mit Pydantic validierst.

## Einführung

* Dieser Artikel führt dich durch die Datenvalidierung mit Pydantic. Pydantic ist eine in Rust geschriebene Python-Bibliothek.
* Bevor wir beginnen, stelle sicher, dass Python und die Pydantic-Bibliothek in deiner Umgebung installiert sind. Sieh dir den Installationsbefehl für Pydantic unten an.

```bash theme={null}
pip install pydantic
```

## Ein Modell erstellen

* Zuerst müssen wir es importieren und unsere Klasse von `pydantic.BaseModel` erben lassen, um mit der Validierung zu beginnen. In unserem Beispiel erstellen wir eine Klasse namens
  `Person`, die einen Namen, ein Alter und eine E-Mail-Adresse hat.

```python theme={null}
from pydantic import BaseModel

class Person(BaseModel):
    name: str
    age: int
    email: str
```

* Wenn wir diese Klasse instanziieren, validiert Pydantic, ob die Parameter `name` und `email` Strings sind und `age` eine Ganzzahl ist.

### Das Modell verwenden

* Nachdem wir es nun erstellt haben, instanziieren wir die Klasse. Wir erstellen ein Dict mit den Daten und entpacken es in unsere Klasse.

```python theme={null}
data = {
    "name": "John",
    "age": 19,
    "email": "john@gmail.com"
}
person = Person(**data)
```

* Das obige Beispiel löst keinen Fehler aus, da alle **Parameter** den korrekten Typ haben. Nun erstellen wir fehlerhafte Daten, um zu bestätigen, dass unsere Validierung
  funktioniert.

```python theme={null}
data = {
    "name": "John",
    "age": "19",
    "email": "john@gmail.com"
}
person = Person(**data)
```

* Im obigen Beispiel wird der Fehler `ValidationError` ausgelöst, da `age` eine **Ganzzahl** sein muss und nicht als **String** angegeben werden kann.

## Eine dataclass erstellen

* Mit Pydantic kannst du auch **dataclasses** erstellen, die den Standard-**dataclasses** von Python ähneln, aber Validierungen wie BaseModel besitzen.

```python theme={null}
from pydantic import dataclass

@dataclass
class Person:
    name: str
    age: int
    email: str
```

* Wenn wir einen `string` an `age` senden, wird er in `int` konvertiert.

<Info>
  Pydantic unterstützt rekursive Validierung, was bedeutet, dass bei der Validierung verschachtelter Modelle auch die inneren
  Modelle validiert werden.

  Wenn eine Klasse eine Liste von `Person` besitzt, `people: list[Person]`, prüft Pydantic jedes Element der Liste und konvertiert es in eine `Person`.
</Info>

## Extras

* Pydantic verfügt über einige Extras wie **E-Mail**-Validierungen und ein Fallback-**Zeitzonen**-Paket. Um sie zu installieren, musst du die folgenden Befehle ausführen:

```bash theme={null}
pip install pydantic[email]
```

```bash theme={null}
pip install pydantic[timezone]
```

* Du kannst beide gemeinsam installieren, indem du den folgenden Befehl ausführst.

```bash theme={null}
pip install pydantic[email,timezone]
```

* Pydantic\[email] bringt eine Klasse zur Verarbeitung von E-Mails mit, die sie normalisiert und das Format `user@domain.tld` validiert. Dafür stellt Pydantic die Klasse `EmailStr` bereit, um diese Validierung durchzuführen.

```python theme={null}
from pydantic import dataclass, EmailStr

@dataclass
class Person:
    name: str
    age: int
    email: EmailStr
```

## Hat Ihnen dieser Artikel gefallen?

* Wir haben diesen Inhalt mit großer Sorgfalt erstellt, um Ihnen die bestmögliche Hilfe zu bieten.
  Wenn Ihnen dieser Artikel in irgendeiner Weise geholfen hat, unterstützen Sie unsere Arbeit! Hinterlassen Sie Ihre Bewertung! Sie hilft uns zu verstehen, was Ihnen am wichtigsten ist.

<CardGroup cols={2}>
  <Card title="Google Reviews" icon="google" href="https://g.page/r/CYZenpQcDgTzEAI/review">
    Hinterlassen Sie Ihre Bewertung bei Google Reviews.
  </Card>

  <Card title="Trustpilot" icon="star" href="https://www.trustpilot.com/review/squarecloud.app">
    Hinterlassen Sie Ihre Bewertung bei Trustpilot.
  </Card>
</CardGroup>
