🎯 Serialização com Pydantic no Python
Em poucas palavras
No Pydantic, os termos “serializar” e “dump” são usados de forma intercambiável. Ambos se referem ao processo de converter um modelo Pydantic em um dicionário (Python
dict) ou em uma string codificada em JavaScript Object Notation.
📝 Notas e Desenvolvimento
🔗 Conexões e Contexto
- Atlas: MdC - Programação
- Notas Relacionadas:
📚 Referências e Fontes
Links Externos
Citações Diretas
📂 Outros Conteúdos Preservados
Serialização com Pydantic no Python
Serialização com Pydantic no Python
No Pydantic, os termos “serializar” e “dump” são usados de forma intercambiável. Ambos se referem ao processo de converter um modelo Pydantic em um dicionário (Python
dict) ou em uma string codificada em JavaScript Object Notation.
:: Referência :: Serialization - Pydantic
Casos de Uso Comuns
- APIs Web: Enviar dados de resposta em formato JSON para clientes.
- Armazenamento de Dados: Salvar o estado de objetos em arquivos JSON ou bancos de dados.
- Comunicação entre Serviços: Trocar informações entre diferentes microserviços.
- Configuração: Ler e escrever arquivos de configuração em formato JSON.
Ao utilizar model_dump() e model_dump_json() com seus respectivos parâmetros, você tem um controle robusto sobre como seus modelos Pydantic são representados em formatos externos, garantindo que os dados sejam transmitidos ou armazenados da maneira correta.
Exemplos Curtos
from typing import Any
from pydantic import BaseModel, Field, Json
class BarModel(BaseModel):
whatever: int
class FooBarModel(BaseModel):
banana: float | None = 1.1
foo: str = Field(serialization_alias='foo_alias')
bar: BarModel
m = FooBarModel(banana=3.14, foo='hello', bar={'whatever': 123})
### returns a dictionary:
print(m.model_dump())
#> {'banana': 3.14, 'foo': 'hello', 'bar': {'whatever': 123}}
print(m.model_dump(include={'foo', 'bar'}))
#> {'foo': 'hello', 'bar': {'whatever': 123}}
print(m.model_dump(exclude={'foo', 'bar'}))
#> {'banana': 3.14}
print(m.model_dump(by_alias=True))
#> {'banana': 3.14, 'foo_alias': 'hello', 'bar': {'whatever': 123}}
print(
FooBarModel(foo='hello', bar={'whatever': 123}).model_dump(
exclude_unset=True
)
)
#> {'foo': 'hello', 'bar': {'whatever': 123}}
print(
FooBarModel(banana=1.1, foo='hello', bar={'whatever': 123}).model_dump(
exclude_defaults=True
)
)
#> {'foo': 'hello', 'bar': {'whatever': 123}}
print(
FooBarModel(foo='hello', bar={'whatever': 123}).model_dump(
exclude_defaults=True
)
)
#> {'foo': 'hello', 'bar': {'whatever': 123}}
print(
FooBarModel(banana=None, foo='hello', bar={'whatever': 123}).model_dump(
exclude_none=True
)
)
#> {'foo': 'hello', 'bar': {'whatever': 123}}
class Model(BaseModel):
x: list[Json[Any]]
print(Model(x=['{"a": 1}', '[1, 2]']).model_dump())
#> {'x': [{'a': 1}, [1, 2]]}
print(Model(x=['{"a": 1}', '[1, 2]']).model_dump(round_trip=True))
#> {'x': ['{"a":1}', '[1,2]']}