Exercício – trabalhar com os dados

Concluído

Ao criar os modelos, criamos uma API que podemos usar para acessar os dados no banco de dados. Essa API nos permite criar, recuperar, atualizar e excluir objetos no banco de dados.

Vamos explorar a API trabalhando com os modelos que criamos.

Configurar o shell interativo

O Django inclui um shell interativo em que você pode executar o código Python no ambiente do Django.

  1. Volte ao terminal no Visual Studio Code selecionando Exibir>Terminal.

  2. Insira o seguinte comando para iniciar o shell:

    python manage.py shell
    
  3. Importe os modelos de models dentro de dog_shelters:

    from dog_shelters.models import Shelter, Dog
    

Criar e modificar objetos

Como os modelos são classes Python, criamos instâncias usando a mesma sintaxe que usaremos para criar um objeto. Como elas herdam de Django.models.Model, elas herdam a funcionalidade do ORM do Django. Essa funcionalidade inclui save, que usamos para salvar o objeto no banco de dados.

  1. Crie um abrigo executando o seguinte comando do Python no shell:

    shelter = Shelter(name="Demo shelter", location="Seattle, WA")
    shelter.save()
    

    A parte save gravará o objeto no banco de dados. Como criamos isso do zero, ele executará uma instrução INSERT no banco de dados.

  2. Atualize a localização do abrigo para Redmond, WA, definindo o campo location e chamando save:

    shelter.location = "Redmond, WA"
    shelter.save()
    

    Esse comando emitirá uma instrução UPDATE para atualizar o valor no banco de dados.

  3. Crie dois cães para o abrigo executando os seguintes comandos do Python no shell:

    Dog(name="Sammy", description="Cute black and white dog", shelter=shelter).save()
    Dog(name="Roscoe", description="Lab mix", shelter=shelter).save()
    

    Como antes, save insere o cão. Observe como definimos o parâmetro shelter para o objeto shelter que criamos antes. O Django definirá automaticamente a relação no banco de dados.

    Observe também que não configuramos uma variável local para cada instância de Dog. Como não reutilizamos os objetos, não precisamos defini-los como uma variável.

Como recuperar objetos

Para recuperar objetos de um banco de dados, o Django fornece uma propriedade objects em todas as classes Model. A propriedade objects fornece várias funções, incluindo all, filter e get.

  1. Recupere todos os cães do Abrigo de demonstração executando o seguinte comando:

    shelter.dog_set.all()
    

    A parte dog_set armazena a lista de todos os cães de determinado abrigo. O Django retornará um objeto QuerySet com os dois cães que criamos.

    <QuerySet [<Dog: Sammy>, <Dog: Roscoe>]>
    
  2. Recupere o segundo cão usando get, conforme mostrado no seguinte comando:

    Dog.objects.get(pk=1)
    

    A função get retornará apenas um objeto. Você pode transmitir parâmetros para get a fim de fornecer uma cadeia de consulta. Aqui, usamos pk, que é uma palavra-chave especial para indicar a chave primária. O resultado retornado será Sammy.

    <Dog: Sammy>
    
  3. Recupere todos os cães do Abrigo de demonstração usando filter, conforme mostrado no seguinte comando:

    Dog.objects.filter(shelter__name='Demo shelter')
    

    Como get, filter nos permite transmitir uma consulta nos parâmetros. Observe que podemos usar dois sublinhados (__) para ir da propriedade para a propriedade. Como queremos encontrar todos os cães do abrigo chamado Abrigo de demonstração, usamos shelter__name para acessar a propriedade name de shelter. O resultado retornado serão todos os cães, pois temos apenas um abrigo.

    <QuerySet [<Dog: Sammy>, <Dog: Roscoe>]>
    

Fechar o shell

Depois de terminar de experimentar com os objetos, feche o shell executando o comando exit().

Resumo

Você acabou de ver como trabalhar de modo programático com os dados no Django por meio do ORM do Django.