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

Godzinowe grupowanie wierszy za pomocą Django

Aby to naprawić, dołącz order_by() do łańcucha zapytań. Spowoduje to zastąpienie domyślnej kolejności modelu Meta . Tak:

Test
.objects
.extra({'hour': 'strftime("%%H", created_on)'})
.order_by()                                        #<------ here
.values('hour')
.annotate(count=Count('id'))

W moim środowisku (również w Postgresie):

>>> print ( Material
         .objects
         .extra({'hour': 'strftime("%%H", data_creacio)'})
         .order_by()
         .values('hour')
         .annotate(count=Count('id'))
         .query )

  SELECT (strftime("%H", data_creacio)) AS "hour", 
         COUNT("material_material"."id") AS "count" 
    FROM "material_material" 
GROUP BY (strftime("%H", data_creacio))

Dowiedz się więcej w order_by django docs :

Uwaga boczna :używając extra() może wprowadzić podatność na wstrzyknięcie SQL do twojego kodu. Używaj tego ostrożnie i unikaj wszelkich parametrów, które użytkownik może wprowadzić. Porównaj z dokumentami :




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego limit czasu zapytania przekracza limit czasu?

  2. Obliczanie odległości między lokalizacją GPS a wartością geograficzną Postgis za pomocą funkcji?

  3. Instalacja PostgreSQL 9.1 i kodowanie bazy danych

  4. Uprawnienia użytkownika PostgreSQL

  5. Postgres konwertuje typ PATH na ARRAY