sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan bruger man underforespørgsel i django?

Det er måske ikke lige det, du leder efter, men det kan bringe dig tættere på. Tag et kig på Djangos annotering .

Her er et eksempel på noget, der kan hjælpe:

  from django.db.models import Max
  Customer.objects.all().annotate(most_recent_purchase=Max('purchase__date'))

Dette vil give dig en liste over dine kundemodeller, som hver især vil have en ny attribut kaldet "seneste_køb" og vil indeholde den dato, hvor de foretog deres sidste køb. Den producerede sql ser sådan ud:

SELECT "demo_customer"."id", 
       "demo_customer"."user_id", 
       MAX("demo_purchase"."date") AS "most_recent_purchase"
FROM "demo_customer"
LEFT OUTER JOIN "demo_purchase" ON ("demo_customer"."id" = "demo_purchase"."customer_id")
GROUP BY "demo_customer"."id",
         "demo_customer"."user_id"

En anden mulighed ville være at tilføje en ejendom til din kundemodel, der ville se sådan ud:

  @property
  def latest_purchase(self):
    return self.purchase_set.order_by('-date')[0]

Du skal naturligvis håndtere sagen, hvor der ikke er nogen køb i denne ejendom, og dette ville potentielt ikke fungere særlig godt (da du ville køre én forespørgsel for hver kunde for at få deres seneste køb).

Jeg har brugt begge disse teknikker tidligere, og de har begge fungeret fint i forskellige situationer. Jeg håber det hjælper. Held og lykke!



  1. Sådan kalder du en procedure, der bruger den samme tabel i efter trigger

  2. fjernforbindelse til mysql

  3. Hvordan opretter jeg forbindelse til MySQL 5.1 i Visual Studio 2010?

  4. Kan vi yderligere forenkle denne MySQL-forespørgsel?