Documentação Completa de Uso do Pydantic
O Pydantic é uma biblioteca do Python para validação de dados e gerenciamento de tipos. Ele é amplamente usado para criar modelos de dados que garantem consistência e validade.
Estrutura Básica
Um modelo no Pydantic é uma classe que herda de BaseModel. Os campos são definidos com anotações de tipo (type hints) do Python.
Tipos Suportados
O Pydantic suporta todos os principais tipos do Python e suas variações.
1. Tipos Básicos
| Tipo |
Descrição |
Exemplo |
int |
Números inteiros |
id: int = 123 |
float |
Números de ponto flutuante |
price: float = 9.99 |
str |
Cadeia de caracteres |
name: str = "Alice" |
bool |
Valores booleanos |
is_active: bool = True |
bytes |
Dados binários |
content: bytes = b"binary data" |
Exemplo:
2. Coleções
| Tipo |
Descrição |
Exemplo |
List |
Lista de itens |
tags: List[str] = ["python", "pydantic"] |
Tuple |
Tupla com tipos fixos |
coords: Tuple[float, float] = (10.0, 20.0) |
Dict |
Dicionário com tipos de chave e valor |
metadata: Dict[str, str] = {"author": "A"} |
Set |
Conjunto de valores únicos |
unique_ids: Set[int] = {1, 2, 3} |
Exemplo:
3. Tipos Especiais
| Tipo |
Descrição |
Exemplo |
Optional |
Campo opcional |
age: Optional[int] = None |
Union |
Aceita múltiplos tipos |
value: Union[int, str] = "text" |
Any |
Aceita qualquer tipo |
data: Any = 123 |
Literal |
Restringe a valores específicos |
status: Literal["draft", "published"] |
Annotated |
Adiciona metadados para validação |
title: Annotated[str, Field(max_length=50)] |
Exemplo:
4. Tipos de Data e Tempo
| Tipo |
Descrição |
Exemplo |
datetime |
Data e hora |
created_at: datetime = datetime.now() |
date |
Apenas data |
dob: date = date(1990, 1, 1) |
time |
Apenas hora |
event_time: time = time(14, 30) |
timedelta |
Duração de tempo |
duration: timedelta = timedelta(hours=1) |
Exemplo:
5. Validações Customizadas
Validações no Campo com Field
6. Erro de Validação
Pydantic levanta uma exceção ValidationError para entradas inválidas.
7. Aninhamento de Modelos
Você pode incluir um modelo dentro de outro.
8. Tipos de Dados do Pydantic
Tipos Básicos
São baseados nos tipos nativos do Python, mas incluem validação extra.
| Tipo |
Descrição |
int |
Números inteiros |
float |
Números de ponto flutuante |
str |
Cadeias de caracteres |
bool |
Valores booleanos (True, False) |
bytes |
Dados binários |
list |
Listas genéricas |
tuple |
Tuplas genéricas |
set |
Conjuntos |
dict |
Dicionários |
| Tipo |
Descrição |
PositiveInt |
Números inteiros positivos (> 0) |
NegativeInt |
Números inteiros negativos (< 0) |
NonNegativeInt |
Números inteiros não-negativos (>= 0) |
NonPositiveInt |
Números inteiros não-positivos (<= 0) |
PositiveFloat |
Números de ponto flutuante positivos (> 0.0) |
NegativeFloat |
Números de ponto flutuante negativos (< 0.0) |
NonNegativeFloat |
Números de ponto flutuante não-negativos (>= 0.0) |
NonPositiveFloat |
Números de ponto flutuante não-positivos (<= 0.0) |
conint |
Inteiros com restrições (ge, le, multiple_of) |
confloat |
Floats com restrições (ge, le, multiple_of) |
| Tipo |
Descrição |
EmailStr |
String validada como e-mail |
UrlStr |
String validada como URL completa |
AnyUrl |
Qualquer URL válida |
HttpUrl |
URLs HTTP(S) válidas com validações extras (ex.: comprimento mínimo) |
FilePath |
Caminho válido para um arquivo |
DirectoryPath |
Caminho válido para um diretório |
constr |
String com restrições (min_length, max_length, regex) |
SecretStr |
String tratada como secreta, com suporte para .get_secret_value() |
Tipos de Data e Hora
| Tipo |
Descrição |
datetime |
Data e hora completas |
date |
Apenas data |
time |
Apenas hora |
timedelta |
Diferença entre duas datas/horas |
PastDate |
Valida que a data seja no passado |
FutureDate |
Valida que a data seja no futuro |
Tipos Booleanos
| Tipo |
Descrição |
StrictBool |
Aceita apenas True ou False explicitamente (sem conversão implícita) |
Tipos de Lista, Conjunto e Tupla com Validação
| Tipo |
Descrição |
conlist |
Lista com restrições (min_items, max_items) |
conset |
Conjunto com restrições (min_items, max_items) |
contuple |
Tupla com restrições (min_length, max_length) |
Tipos de Redes e Endereços
| Tipo |
Descrição |
IPvAnyAddress |
Aceita endereços IPv4 ou IPv6 |
IPv4Address |
Apenas endereços IPv4 |
IPv6Address |
Apenas endereços IPv6 |
IPvAnyInterface |
Interface de rede IPv4 ou IPv6 |
IPv4Interface |
Apenas interfaces IPv4 |
IPv6Interface |
Apenas interfaces IPv6 |
IPvAnyNetwork |
Rede IPv4 ou IPv6 |
IPv4Network |
Apenas redes IPv4 |
IPv6Network |
Apenas redes IPv6 |
MacAddress |
Endereço MAC |
Tipos Especiais
| Tipo |
Descrição |
SecretBytes |
Dados binários tratados como secretos |
Json |
String JSON válida |
PaymentCardNumber |
Número de cartão de crédito válido |
Decimal |
Valores decimais com precisão arbitrária |
Color |
Valida e representa cores (hexadecimal, nome, etc.) |
Pydantic permite criar tipos customizados como conint ou constr para validar valores de acordo com restrições específicas.
Exemplo: Tipo de String Restritiva
Exemplo: Inteiros com Restrições
Resumo
| Categoria |
Exemplos Principais |
| Básicos |
int, float, str, bool, list, dict |
| Numéricos |
PositiveInt, NonNegativeFloat, conint, confloat |
| Strings |
EmailStr, UrlStr, SecretStr, constr |
| Datas e Horas |
datetime, date, timedelta, FutureDate |
| Redes |
IPv4Address, IPvAnyNetwork, MacAddress |
| Especiais |
Json, PaymentCardNumber, Color, Decimal |
Essa lista cobre os tipos mais usados no Pydantic!
1 Comment
In reply to #2
essa eh a resposta da resposta do comentario