Vue d'ensemble
Pydantic 2.0, publié le 1er juillet 2023, est une réécriture complète avec un coeur en Rust (pydantic-core). Les validations sont 5 à 50 fois plus rapides et l'API a été modernisée.
Fonctionnalités principales
Coeur en Rust (5-50x plus rapide)
Le moteur de validation est réécrit en Rust via pydantic-core, offrant des gains de performance massifs sur la validation et la sérialisation des données.
python
from pydantic import BaseModel
from datetime import datetime
class Utilisateur(BaseModel):
nom: str
email: str
age: int
inscrit_le: datetime
# Validation 5-50x plus rapide qu'en v1
u = Utilisateur(
nom='Alice',
email='alice@example.com',
age=30,
inscrit_le='2023-07-01T10:00:00',
)
print(u.model_dump()) # nouvelle API v2
Nouvelle API
L'API est renommée pour plus de clarté : .dict() devient .model_dump(), .json() devient .model_dump_json(), et .parse_obj() devient .model_validate().
python
from pydantic import BaseModel, field_validator
class Produit(BaseModel):
nom: str
prix: float
stock: int = 0
@field_validator('prix')
@classmethod
def prix_positif(cls, v):
if v <= 0:
raise ValueError('Le prix doit être positif')
return v
p = Produit(nom='Widget', prix=9.99, stock=100)
print(p.model_dump_json()) # sérialisation JSON
print(p.model_json_schema()) # schéma JSON
Sérialisation personnalisée
Le nouveau système de sérialisation permet de personnaliser la sortie avec des décorateurs @field_serializer et des modes json/python.
python
from pydantic import BaseModel, field_serializer
from datetime import datetime
class Evenement(BaseModel):
titre: str
date: datetime
@field_serializer('date')
def serialiser_date(self, v: datetime, _info):
return v.strftime('%d/%m/%Y %H:%M')
e = Evenement(titre='Conf Python', date='2023-07-01T14:00:00')
print(e.model_dump())
# {'titre': 'Conf Python', 'date': '01/07/2023 14:00'}
