Modelos Aninhados no Pydantic: Trabalhando com Estruturas Complexas

Cansado de programar?

Cansado(a) de quebrar a cabeça para aprender a programar Python de verdade?

Conheça a melhor e mais completa formação de Python e Django e sinta-se um programador verdadeiramente competente. Além de Python e Django, você também vai aprender Banco de Dados, SQL, HTML, CSS, Javascript, Bootstrap e muito mais!

Quero aprender Python e Django de Verdade! Quero aprender!
Suporte

Tire suas dúvidas diretamente com o professor

Suporte

Projetos práticos voltados para o mercado de trabalho

Suporte

Formação moderna com foco na prática profissional

Salve salve Pythonista :wave:

No desenvolvimento de aplicações Python, a manipulação de estruturas de dados complexas pode ser desafiadora.

Com o Pydantic v2, a tarefa de validação e modelagem torna-se mais intuitiva.

Este artigo foca nos modelos aninhados, que permitem representar relações entre dados em Python.

Vamos explorar como o Pydantic lida com listas, dicionários e estruturas JSON complexas.

Além disso, veremos como converter modelos aninhados em dicionários e JSON, essencial para transferências de dados.

Vá Direto ao Assunto…

Representando relações entre dados

O Pydantic permite a construção de modelos aninhados, ou seja, modelos que contêm outros modelos como campos.

Esta função é útil para representar estruturas hierárquicas.

Veja como criar um modelo aninhado simples:

1
2
3
4
5
6
7
8
9
10
from pydantic import BaseModel

class Endereco(BaseModel):
    rua: str
    cidade: str

class Usuario(BaseModel):
    nome: str
    email: str
    endereco: Endereco

Neste exemplo, Usuario possui um campo endereco do tipo Endereco.

Isso estabelece uma relação entre Usuario e seu endereço.

Validação de listas e dicionários

O Pydantic também lida bem com coleções de dados.

Podemos validar listas e dicionários de modelos aninhados facilmente.

Veja um exemplo com listas:

1
2
3
4
5
6
7
class Pedido(BaseModel):
    id_pedido: int
    descricao: str

class Cliente(BaseModel):
    nome: str
    pedidos: list[Pedido]

Aqui, Cliente tem uma lista de pedidos, cada um representado pelo modelo Pedido.

Vamos ver como instanciar e validar:

1
2
3
4
pedido1 = Pedido(id_pedido=1, descricao="Pedido 1")
pedido2 = Pedido(id_pedido=2, descricao="Pedido 2")
cliente = Cliente(nome="Alice", pedidos=[pedido1, pedido2])
print(cliente)

E a saída será:

1
nome='Alice' pedidos=[Pedido(id_pedido=1, descricao='Pedido 1'), Pedido(id_pedido=2, descricao='Pedido 2')]

Essa abordagem promove organização e clareza no código, especialmente com estruturas JSON complexas em APIs.

Validando estruturas JSON complexas

Estruturas JSON complexas são comuns ao lidar com APIs.

O Pydantic facilita a validação e manipulação dessas estruturas.

Veja como usar modelos para validar um JSON complexo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import json

dados_json = '''
{
    "nome": "Carlos",
    "email": "[email protected]",
    "endereco": {
        "rua": "Rua das Flores",
        "cidade": "São Paulo"
    }
}
'''

dados = json.loads(dados_json)
usuario = Usuario(**dados)
print(usuario)

E a saída será:

1
nome='Carlos' email='[email protected]' endereco=Endereco(rua='Rua das Flores', cidade='São Paulo')

Neste exemplo, o JSON é convertido em um modelo Usuario, que é validado automaticamente.

Antes de continuar… Está curtindo esse conteúdo? :thumbsup:

Que tal receber 30 dias de conteúdo direto na sua Caixa de Entrada?

Sua assinatura não pôde ser validada.
Você fez sua assinatura com sucesso.

Assine as PyDicas e receba 30 dias do melhor conteúdo Python na sua Caixa de Entrada: direto e sem enrolação!

Conversão de modelos em dicionários e JSON

O Pydantic permite converter modelos em dicionários e JSON facilmente.

Isso é útil para exportar dados de forma estruturada.

Conversão para dicionários

Usando o método model_dump, é possível converter para dicionário:

1
2
usuario_dict = usuario.model_dump()
print(usuario_dict)

A saída será:

1
{'nome': 'Carlos', 'email': '[email protected]', 'endereco': {'rua': 'Rua das Flores', 'cidade': 'São Paulo'}}

Conversão para JSON

Com model_dump_json, transformamos para JSON:

1
2
usuario_json = usuario.model_dump_json()
print(usuario_json)

A saída será:

1
{"nome": "Carlos", "email": "[email protected]", "endereco": {"rua": "Rua das Flores", "cidade": "São Paulo"}}

Esses métodos são fundamentais para transferir dados em aplicações web.

Antes de prosseguir, precisamos ressaltar!

Aprenda Python de maneira prática com nosso curso completo!

Jornada Python Jornada Python

Conclusão

Exploramos como o Pydantic v2 facilita o trabalho com estruturas complexas por meio de modelos aninhados.

Vimos como representá-los e validá-los, garantindo consistência e precisão.

Aprendemos a integrar dados usando listas e dicionários, e a lidar com estruturas JSON complexas.

Além disso, mostramos a conversão eficiente para dicionários e JSON, essencial para muitas aplicações.

#newsletter Olá :wave: Curtiu o artigo? Então faça parte da nossa Newsletter! Privacidade Não se preocupe, respeitamos sua privacidade. Você pode se descadastrar a qualquer momento.