PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak używać podzapytania w django?

To może nie być dokładnie to, czego szukasz, ale może Cię zbliżyć. Spójrz na Adnotację Django .

Oto przykład czegoś, co może pomóc:

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

Spowoduje to wyświetlenie listy modeli klientów, z których każdy będzie miał nowy atrybut o nazwie „most_recent_purchase” i będzie zawierał datę ostatniego zakupu. Wytworzony sql wygląda tak:

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"

Inną opcją byłoby dodanie do modelu klienta właściwości, która wyglądałaby mniej więcej tak:

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

Oczywiście musiałbyś zająć się przypadkiem, w którym nie ma żadnych zakupów w tej nieruchomości, a to potencjalnie nie działałoby zbyt dobrze (ponieważ uruchamiasz jedno zapytanie dla każdego klienta, aby uzyskać jego najnowszy zakup).

Używałem obu tych technik w przeszłości i obie działały dobrze w różnych sytuacjach. Mam nadzieję, że to pomoże. Powodzenia!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. błąd :podzapytanie musi zwrócić tylko jedną kolumnę

  2. Typ danych JDBC, Elasticsearch i Postgresql Json

  3. Pominięcie podwójnego cudzysłowu w celu wykonania zapytania w PostgreSQL

  4. PSQLException:duże obiekty nie mogą być używane w trybie automatycznego zatwierdzania

  5. Postgresql — twórz dynamicznie bazę danych i tabelę