sql >> Databasteknik >  >> RDS >> PostgreSQL

Gruppering av rader varje timme med Django

För att fixa det, lägg till order_by() för att fråga kedjan. Detta kommer att åsidosätta modellens Meta-standardordning . Så här:

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

I min miljö ( Postgres också ):

>>> 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))

Läs mer i order_by django docs :

Sidoanteckning :med extra() kan introducera SQL-injektionssårbarhet till din kod. Använd detta med försiktighet och undvik alla parametrar som användaren kan introducera. Jämför med docs :




  1. Hooks utlöses inte när du infogar råfrågor via sequelize.query()

  2. Syntax för en parameterfråga i Python (pyodbc)

  3. Vad är skillnaden mellan 'ÅÅÅÅ' och 'RRRR' i Oracle SQL

  4. Konvertera en avgränsad sträng (eller kolumn) till rader i Oracle med hjälp av en fördefinierad systemfunktion