consultas Multijoin em Django

votos
4

Qual é a melhor e / ou mais rápido método de fazer consultas multijoin em Django usando o ORM e QuerySet API?

Publicado 16/09/2008 em 15:00
fonte usuário
Em outras línguas...                            


4 respostas

votos
4

Se você está tentando ingressar em mesas ligados por ForeignKeys ou relacionamentos ManyToManyField então você pode usar a sintaxe sublinhado duplo. Por exemplo, se você tem os seguintes modelos:

class Foo(models.Model):
    name = models.CharField(max_length=255)

class FizzBuzz(models.Model):
    bleh = models.CharField(max_length=255)

class Bar(models.Model):
    foo = models.ForeignKey(Foo)
    fizzbuzz = models.ForeignKey(FizzBuzz) 

Você pode fazer algo como:

Fizzbuzz.objects.filter(bar__foo__name = "Adrian")
Respondeu 16/09/2008 em 16:05
fonte usuário

votos
2

Não utilize a API ;-) Sério, se o seu Cadastre são complexas, você deve ver aumentos significativos de desempenho, largando para baixo para SQL em vez de usar a API. E isso não significa que você precisa para obter SQL suja suja em todo o seu código Python bonita; basta fazer um gestor personalizado para lidar com as junções e depois ter o resto do seu código de usá-lo em vez de SQL direta.

Além disso, eu estava apenas em DjangoCon onde tiveram um seminário sobre alta performance Django, e uma das coisas principais que tirou foi que se o desempenho é uma preocupação real (e você pretende ter um tráfego significativo um dia), você realmente não deveria estar fazendo JOINs em primeiro lugar, porque eles fazem escalar seu aplicativo, mantendo o desempenho decente praticamente impossível.

Aqui está um vídeo Google fez parte da conversa: http://www.youtube.com/watch?v=D-4UN4MkSyI&feature=PlayList&p=D415FAF806EC47A1&index=20

Claro, se você sabe que a sua aplicação nunca vai ter de lidar com esse tipo de escala preocupação, Cadastre-se para longe :-) E se você também não está preocupado com o hit de usar a API desempenho, então você realmente don' t precisa se preocupar com o (AFAIK) minúsculo, se houver, diferença de desempenho entre o uso de um método API em detrimento de outro.

Basta usar: http://docs.djangoproject.com/en/dev/topics/db/queries/#lookups-that-span-relationships

Espero que ajude (e se isso não acontecer, espero que algum verdadeiro hacker Django pode entrar e explicar por que método X realmente tem alguma diferença de desempenho perceptível).

Respondeu 16/09/2008 em 16:18
fonte usuário

votos
1

Use o método queryset.query.join, mas só se o outro método descrito aqui (usando sublinhados duplos) não é adequada.

Respondeu 16/12/2008 em 18:42
fonte usuário

votos
0

Caktus blog tem uma resposta para isso: http://www.caktusgroup.com/blog/2009/09/28/custom-joins-with-djangos-queryjoin/

Basicamente, há um método escondido QuerySet.query.join que permite a adição de costume junta.

Respondeu 12/12/2009 em 20:01
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more