Exercício – trabalhar com os dados
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.
Volte ao terminal no Visual Studio Code selecionando Exibir>Terminal.
Insira o seguinte comando para iniciar o shell:
python manage.py shell
Importe os modelos de
models
dentro dedog_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.
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çãoINSERT
no banco de dados.Atualize a localização do abrigo para Redmond, WA, definindo o campo
location
e chamandosave
:shelter.location = "Redmond, WA" shelter.save()
Esse comando emitirá uma instrução
UPDATE
para atualizar o valor no banco de dados.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âmetroshelter
para o objetoshelter
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
.
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 objetoQuerySet
com os dois cães que criamos.<QuerySet [<Dog: Sammy>, <Dog: Roscoe>]>
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 paraget
a fim de fornecer uma cadeia de consulta. Aqui, usamospk
, que é uma palavra-chave especial para indicar a chave primária. O resultado retornado será Sammy.<Dog: Sammy>
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, usamosshelter__name
para acessar a propriedadename
deshelter
. 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.