Pydantique¶
.
Pydantic est la bibliothèque de validation de données la plus utilisée pour Python.
Rapide et extensible, Pydantic joue bien avec vos linters/IDE/cerveau. Définir la façon dont les données doivent être dans Python 3.8+ pur et canonique; validez-le avec Pydantic.
!!! succès « Migration vers Pydantic V2 » Vous utilisez Pydantic V1 ? Consultez le Guide de migration pour obtenir des notes sur la mise à niveau vers Pydantic V2 dans vos applications!
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)
Pourquoi Pydantic est-il nommé ainsi?
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 😉.
Pourquoi utiliser Pydantic ?¶
- Propulsé par des indices de type — avec Pydantic, la validation du schéma et la sérialisation sont contrôlées par des annotations de type ; moins à apprendre, moins de code à écrire et une intégration avec votre IDE et vos outils d'analyse statique. Apprendre encore plus…
- Vitesse — La logique de validation de base de Pydantic est écrite en Rust. En conséquence, Pydantic fait partie des bibliothèques de validation de données les plus rapides pour Python. Apprendre encore plus…
- Schéma JSON — Les modèles Pydantic peuvent émettre un schéma JSON, permettant une intégration facile avec d'autres outils. Apprendre encore plus…
- Modes strict et laxiste — Pydantic peut s'exécuter en mode strict=True (où les données ne sont pas converties) ou en mode strict=False où Pydantic essaie de contraindre les données au type correct, le cas échéant. Apprendre encore plus…
- Dataclasses, TypedDicts et plus — Pydantic prend en charge la validation de nombreux types de bibliothèques standard, notamment dataclass et TypedDict. Apprendre encore plus…
- Personnalisation — Pydantic permet aux validateurs et sérialiseurs personnalisés de modifier la façon dont les données sont traitées de nombreuses manières puissantes. Apprendre encore plus…
- Écosystème — environ 8 000 packages sur PyPI utilisent Pydantic, y compris des bibliothèques extrêmement populaires comme FastAPI, huggingface, Django Ninja, SQLModel et LangChain. Apprendre encore plus…
- Testé au combat — Pydantic est téléchargé plus de 70 millions de fois/mois et est utilisé par toutes les sociétés FAANG et 20 des 25 plus grandes sociétés du NASDAQ. Si vous essayez de faire quelque chose avec Pydantic, quelqu'un d'autre l'a probablement déjà fait. Apprendre encore plus…
Installer Pydantic est aussi simple que: pip install pydantic
Exemples pydantiques¶
Pour voir Pydantic au travail, commençons par un exemple simple, créant une classe personnalisée qui hérite de 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},
}
"""
- id est de type int; la déclaration d'annotation uniquement indique à Pydantic que ce champ est obligatoire. Les chaînes, octets ou flottants seront contraints à des entiers si possible; sinon, une exception sera levée.
- le nom est une chaîne; comme il a une valeur par défaut, il n'est pas obligatoire.
- signup_ts est un champ datetime obligatoire, mais la valeur None peut être fournie; Pydantic traitera soit un horodatage Unix int (par exemple 1496498400), soit une chaîne représentant la date et l'heure.
- Tastes est un dictionnaire avec des clés de chaîne et des valeurs entières positives. Le type PositiveInt est un raccourci pour
Annotated[int, annotated_types.Gt(0)]
. - L'entrée ici est une date/heure au format ISO8601, Pydantic la convertira en un objet datetime.
- La clé ici est en octets, mais Pydantic se chargera de la forcer à une chaîne.
- De même, Pydantic forcera la chaîne «1» à un entier 1.
- Ici, nous créons une instance d'utilisateur en transmettant nos données externes à l'utilisateur sous forme d'arguments de mots clés
- Nous pouvons accéder aux champs comme attributs du modèle
- Nous pouvons convertir le modèle en dictionnaire avec model_dump()
Si la validation échoue, Pydantic générera une erreur avec une description de ce qui n'allait pas:
# 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',
},
]
"""
- Les données d'entrée sont fausses ici - id n'est pas un entier valide et signup_ts est manquant
- L'utilisateur (...) générera une ValidationError avec une liste d'erreurs
Qui utilise Pydantic ?¶
Des centaines d'organisations et de packages utilisent Pydantic. Certaines des entreprises et organisations de premier plan dans le monde qui utilisent Pydantic comprennent:
Pour une liste plus complète des projets open source utilisant Pydantic, consultez le liste des personnes à charge sur github, ou vous pouvez trouver des projets géniaux utilisant Pydantic dans Awesome-pydantic.
本文总阅读量次