"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pydantic • Gérer la validation et la désinfection des données

Pydantic • Gérer la validation et la désinfection des données

Publié le 2024-08-19
Parcourir:929

Pydantic • Dealing with validating and sanitizing data

Depuis que j'ai commencé à programmer, j'ai principalement utilisé des paradigmes structurés et procéduraux, car mes tâches nécessitaient des solutions plus pratiques et directes. Lorsque je travaillais avec l'extraction de données, j'ai dû passer à de nouveaux paradigmes pour obtenir un code plus organisé.

Un exemple de cette nécessité était lors de tâches de scraping lorsque j'avais besoin de capturer des données spécifiques qui étaient initialement d'un type que je savais gérer, mais tout d'un coup, elles n'existaient pas ou apparaissaient sous un type différent lors de la capture. .

Par conséquent, j'ai dû ajouter des blocs if's et try and catch pour vérifier si les données étaient un entier ou une chaîne... découvrant plus tard que rien n'était capturé, Aucun , etc. Avec les dictionnaires, j'ai fini par sauvegarder des "données par défaut" inintéressantes dans des situations comme :

data.get(values, 0)

Eh bien, les messages d'erreur déroutants devaient certainement cesser d'apparaître.

C'est ainsi que Python est dynamique. Les types des variables peuvent être modifiés à tout moment, jusqu'à ce que vous ayez besoin de plus de clarté sur les types avec lesquels vous travaillez. Puis, tout à coup, un tas d'informations apparaissent, et maintenant je lis comment je peux gérer la validation des données, avec l'EDI qui m'aide avec des astuces de type et l'intéressante bibliothèque pydantic.

Maintenant, dans des tâches comme la manipulation de données et avec un nouveau paradigme, je peux avoir des objets dont leurs types seront explicitement déclarés, ainsi qu'une bibliothèque qui permettra de valider ces types. Si quelque chose ne va pas, il sera plus facile de déboguer en voyant les informations d'erreur mieux décrites.


Pydantique

Voici donc la documentation Pydantic. Pour plus de questions, il est toujours bon de consulter.

En gros, comme nous le savons déjà, nous commençons par :

pip install pydantic

Et puis, hypothétiquement, nous voulons capturer les e-mails d'une source qui contient ces e-mails, et la plupart d'entre eux ressemblent à ceci : "[email protected]". Mais parfois, cela peut ressembler à ceci : « xxxx@ » ou « xxxx ». Nous n'avons aucun doute sur le format d'e-mail qui doit être capturé, nous validerons donc cette chaîne d'e-mail avec Pydantic :

from pydantic import BaseModel, EmailStr

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

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

print(consumer)

Remarquez que j'ai utilisé une dépendance facultative, "email-validator", installée avec : pip install pydantic[email]. Lorsque vous exécutez le code, comme nous le savons, l'erreur sera au format d'e-mail invalide "teste@teste":

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]

Utiliser des dépendances facultatives pour valider les données est intéressant, tout comme créer nos propres validations, et Pydantic le permet via field_validator. Nous savons donc que account_id doit être positif et supérieur à zéro. Si c'est différent, il serait intéressant que Pydantic prévienne qu'il y a eu une exception, une erreur de valeur. Le code serait alors :

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

Maintenant, exécutez le code avec les valeurs correctes :

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

Droite?!

J'ai aussi lu quelque chose sur le module natif "dataclasses", qui est un peu plus simple et présente quelques similitudes avec Pydantic. Cependant, Pydantic est meilleur pour gérer des modèles de données plus complexes nécessitant des validations. Les classes de données étaient nativement incluses dans Python, alors que Pydantic ne l'est pas, du moins pas encore.

Déclaration de sortie Cet article est reproduit sur : https://dev.to/evertontenorio/pydantic-dealing-with-validating-and-sanitizing-data-594p?1 En cas d'infraction, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3