Melhorando a performance de consultas na base de dado da sua aplicação.

แชร์
ฝัง
  • เผยแพร่เมื่อ 21 ม.ค. 2025

ความคิดเห็น • 16

  • @adioaldomachado6569
    @adioaldomachado6569 4 ปีที่แล้ว +2

    Vale Rafael. Esse tipo de conteúdo que está faltando em tutoriais e vídeos por aí.... Parabéns!

  • @xxyurikfxx
    @xxyurikfxx 2 ปีที่แล้ว

    Conteúdo massa demais! Muito obrigado por compartilhar!

  • @HigorLP
    @HigorLP 4 ปีที่แล้ว +1

    Excelente vídeo!

  • @igormoreiraalves7492
    @igormoreiraalves7492 4 ปีที่แล้ว

    Ajudou bastante

  • @FAELP22
    @FAELP22 4 ปีที่แล้ว +1

    você tem uma dica para fazer um select_related reverso? tipo assim tenho tb_produto

    • @RafaelGalleani
      @RafaelGalleani  4 ปีที่แล้ว +1

      Me corrija se eu estiver errado. Nesse caso tu já tem o ID do produto? Pois se tu já tem o id do produto e só precisa pegar a imagens na outra tabela, você pode consultar diretamente a outra tabela passando o ID do produto. Vou exemplificar aqui com duas tabela do vídeo. Nos temos a tabela Produto e a Venda, onde venda possui Produto. Agora, vamos supor que já tem o id do produto e precisamos buscar todas as vendas desse produto, neste caso, não preciso fazer uma consulta em Produto para depois fazer em Venda, faço diretamente na consulta desta forma: Venda.objects.filter(produto=1) e caso tu precisar apenas de um campo da tabela tu pode fazer assim também Venda.objects.values("data_venda").filter(produto=1) nesse caso já tenho o id do produto e quero apenas as data de venda deste produto. Vocẽ não precisa do objeto produto, você só precisa ter a FK do mesmo. Agora se ao invés do ID (FK) tu tiver o campo Nome que não é FK por exemplo, ai não tem vai te jeito, tu vai ter que passar pelas duas tabelas, mas ai aconselho a fazer por join ao invés de duas consultas, ficaria assim: Venda.objects.filter(produto__nome="Notebook HP").
      Espero ter conseguido lhe ajudar! Forte abraço! =D

    • @FAELP22
      @FAELP22 4 ปีที่แล้ว

      @@RafaelGalleani Entendi os dois exemplos, assim tenho duas tabelas, Tb_Produto e Tb_Produto_Imagem, a Tb_Produto_Imagem tem uma FK para Tb_Produto, dai na consulta vou no seguinte sentido, pesquiso por produto depois pego as imagens dele, eu criei algumas query passando de um para o outro ex:
      lista_produtos = Tb_Produto.obj..filter... depois Tb_Produto_Imagem.obj...filter(produto_in=lista_produtos)
      Assim com isso resolvi as múltiplas consultas, mas acho estranho o fluxo pois no final estou com objeto de Tb_Produto_Imagem, e as imagens é opcional e não consegui fazer uma consulta que me retorne um produto que não tem imagem, da forma como ficou a consulta é obrigado ter imagem.

    • @RafaelGalleani
      @RafaelGalleani  4 ปีที่แล้ว +1

      @@FAELP22 Ah agora eu entendi Isael, o que tu precisa é de um left join da produto com a imagem. De fato isso tu não vai conseguir fazer sem ser da forma como tu já resolveu, até dei uma pesquisada pra ter certeza que não é apenas um desconhecimento meu, mas aparentemente não é. Realmente não tem como usar left join no Django, pelo que pesquisei e li na documentação pelo menos não encontrei nada a respeito, encontrei até um ticket que sugeria forma de aplicar o left join. Aparentemente, pelo que encontrei só seria possível através do uso de Raw SQL Queries (docs.djangoproject.com/en/3.0/topics/db/sql/) mas não fica tão elegante e se não for algo que esteja impactando muito de performance, não vejo porque utiliza-lo, ai faz mais sentido manter como está no seu código.
      Espero que tenha conseguido lhe ajudar, infelizmente ao que tudo indica isso não foi pensado no Django. :S

    • @FAELP22
      @FAELP22 4 ปีที่แล้ว

      @@RafaelGalleani obrigado.

  • @ALBISLAN
    @ALBISLAN 3 ปีที่แล้ว

    Muito útil e bem explicado professor. Me tire uma dúvida por favor, em outro vídeo seu, você ensina a usar a função get_absolute_url no model e chamando ela no html de listagem para fazer o update, porém quando apliquei as dicas dessa aula de perfomance parece que essa função não responde mais. Sabe dizer como posso continuar chamando essa função sem perder essa instrução de performance?

    • @RafaelGalleani
      @RafaelGalleani  2 ปีที่แล้ว +1

      Neste situação, não tem como, porque você não tem mais o objeto da classe e sim um dicionário. Uma forma de manter isso em funcão e ter performance ao mesmo tempo é utilizando template tags (docs.djangoproject.com/en/4.0/howto/custom-template-tags/).

  • @thiagomartins984
    @thiagomartins984 4 ปีที่แล้ว

    Ajudou bastante!! Só não consegui entender o 'produto__tipo' , em qual parte é declarado isso (origem) ? Observei que ele não foi atribuido nos models e fiquei na duvida

    • @RafaelGalleani
      @RafaelGalleani  4 ปีที่แล้ว

      Opa Thiago! Existe uma relação entre a tabela produto e a tabela tipo_produto, é daí que temos o produto__tipo. Se você olha em 3m00s, verá o ER das tabelas e nos 3m54s, você verá as duas classes, Produto e TipoProduto, onde na classe Produto temos um campo tipo sendo relacionado com a tabela TipoProduto. Espero ter ajudado! Abraços!

  • @omauricioeugenio
    @omauricioeugenio 4 ปีที่แล้ว

    Isso pode influenciar na segurança tbm? Por exemplo quando vc retorna um user ?

    • @RafaelGalleani
      @RafaelGalleani  4 ปีที่แล้ว +1

      Teria problema de segurança, se você estiver fazendo uma requisição ajax por exemplo, onde você pode estar trefegando informação sensível a qual aquele usuário não deveria poder acessar e você está gerenciando isso no seu frontend e não no backend, isso seria uma brecha de segurança.