sql >> Database >  >> RDS >> PostgreSQL

Hoe subquery gebruiken in django?

Dit is misschien niet precies wat je zoekt, maar het kan je dichterbij brengen. Bekijk Django's annotatie .

Hier is een voorbeeld van iets dat kan helpen:

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

Dit geeft u een lijst van uw klantmodellen die elk een nieuw kenmerk hebben met de naam "meest_recente_aankoop" en de datum bevatten waarop ze hun laatste aankoop hebben gedaan. De geproduceerde sql ziet er als volgt uit:

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"

Een andere optie is het toevoegen van een eigenschap aan uw klantmodel die er ongeveer zo uitziet:

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

U zou natuurlijk het geval moeten behandelen waarin er geen aankopen zijn in dit eigendom, en dit zou mogelijk niet erg goed presteren (aangezien u één zoekopdracht voor elke klant zou uitvoeren om hun laatste aankoop te krijgen).

Ik heb beide technieken in het verleden gebruikt en ze hebben allebei goed gewerkt in verschillende situaties. Ik hoop dat dit helpt. Veel succes!



  1. 12.2 RAC/GI Nieuwe functies

  2. Kan ik de waarde van een automatisch verhoogd veld in de database automatisch aanpassen?

  3. Krijg Skype-chatgeschiedenis van main.db gesynchroniseerd met MySQL met PHP

  4. Hoe verbind je Django met een MySQL-database via een SSL-verbinding?