„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Pydantic • Umgang mit der Validierung und Bereinigung von Daten

Pydantic • Umgang mit der Validierung und Bereinigung von Daten

Veröffentlicht am 19.08.2024
Durchsuche:729

Pydantic • Dealing with validating and sanitizing data

Seitdem ich mit dem Programmieren begonnen habe, verwende ich hauptsächlich strukturierte und prozedurale Paradigmen, da meine Aufgaben praktischere und direktere Lösungen erforderten. Bei der Arbeit mit der Datenextraktion musste ich auf neue Paradigmen umsteigen, um einen besser organisierten Code zu erreichen.

Ein Beispiel für diese Notwendigkeit waren Scraping-Aufgaben, bei denen ich bestimmte Daten erfassen musste, die ursprünglich von einem Typ waren, mit dem ich umgehen konnte, aber dann plötzlich entweder nicht existierten oder während der Erfassung in einem anderen Typ auftraten .

Folglich musste ich einige if's- und try-and-catch-Blöcke hinzufügen, um zu überprüfen, ob die Daten ein int oder ein String waren ... später stellte ich fest, dass nichts erfasst wurde, None usw. Bei Wörterbüchern habe ich in Situationen wie:
einige uninteressante „Standarddaten“ gespeichert

data.get(values, 0)

Nun, die verwirrenden Fehlermeldungen mussten auf jeden Fall aufhören zu erscheinen.

So ist Python dynamisch. Der Typ von Variablen kann jederzeit geändert werden, bis Sie mehr Klarheit über die Typen benötigen, mit denen Sie arbeiten. Dann tauchen plötzlich eine Menge Informationen auf und jetzt lese ich darüber, wie ich mit der Datenvalidierung umgehen kann, wobei mir die IDE mit Typhinweisen und der interessanten pydantic-Bibliothek hilft.

Jetzt kann ich bei Aufgaben wie der Datenmanipulation und mit einem neuen Paradigma Objekte haben, deren Typen explizit deklariert werden, zusammen mit einer Bibliothek, die die Validierung dieser Typen ermöglicht. Wenn etwas schief geht, ist das Debuggen einfacher, da die besser beschriebenen Fehlerinformationen angezeigt werden.


Pydantisch

Hier ist also die Pydantic-Dokumentation. Bei weiteren Fragen ist es immer gut, sich an uns zu wenden.

Grundsätzlich beginnen wir, wie wir bereits wissen, mit:

pip install pydantic

Und dann möchten wir hypothetisch E-Mails von einer Quelle erfassen, die diese E-Mails enthält, und die meisten davon sehen so aus: „[email protected]“. Aber manchmal kann es so kommen: „xxxx@“ oder „xxxx“. Wir haben keine Zweifel an dem E-Mail-Format, das erfasst werden soll, daher werden wir diese E-Mail-Zeichenfolge mit Pydantic validieren:

from pydantic import BaseModel, EmailStr

class Consumer(BaseModel):
    email: EmailStr
    account_id: int

consumer = Consumer(email="teste@teste", account_id=12345)

print(consumer)

Beachten Sie, dass ich eine optionale Abhängigkeit, „email-validator“, verwendet habe, installiert mit: pip install pydantic[email]. Wenn Sie den Code ausführen, liegt der Fehler bekanntlich im ungültigen E-Mail-Format „teste@teste“ vor:

Traceback (most recent call last):
  ...
    consumer = Consumer(email="teste@teste", account_id=12345)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  ...: 1 validation error for Consumer
email
  value is not a valid email address: The part after the @-sign is not valid. It should have a period. [type=value_error, input_value='teste@teste', input_type=str]

Die Verwendung optionaler Abhängigkeiten zum Validieren von Daten ist ebenso interessant wie das Erstellen eigener Validierungen, und Pydantic ermöglicht dies über field_validator. Wir wissen also, dass account_id positiv und größer als Null sein muss. Wenn es anders ist, wäre es für Pydantic interessant, zu warnen, dass eine Ausnahme, ein Wertfehler, aufgetreten ist. Der Code wäre dann:

from pydantic import BaseModel, EmailStr, field_validator

class Consumer(BaseModel):
    email: EmailStr
    account_id: int

    @field_validator("account_id")
    def validate_account_id(cls, value):
        """Custom Field Validation"""
        if value 





$ python capture_emails.py
Traceback (most recent call last):
...
    consumer = Consumer(email="[email protected]", account_id=0)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

...: 1 validation error for Consumer
account_id
  Value error, account_id must be positive: 0 [type=value_error, input_value=0, input_type=int]
    For further information visit https://errors.pydantic.dev/2.8/v/value_error

Führen Sie nun den Code mit den richtigen Werten aus:

from pydantic import BaseModel, EmailStr, field_validator

class Consumer(BaseModel):
    email: EmailStr
    account_id: int

    @field_validator("account_id")
    def validate_account_id(cls, value):
        """Custom Field Validation"""
        if value 





$ python capture_emails.py
email='[email protected]' account_id=12345

Rechts?!

Ich habe auch etwas über das native Modul „dataclasses“ gelesen, das etwas einfacher ist und einige Ähnlichkeiten mit Pydantic aufweist. Allerdings eignet sich Pydantic besser für den Umgang mit komplexeren Datenmodellen, die Validierungen erfordern. Dataclasses war nativ in Python enthalten, Pydantic jedoch nicht – zumindest noch nicht.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/evertontenorio/pydantic-dealing-with-validating-and-sanitizing-data-594p?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3