sql >> Databáze >  >> RDS >> PostgreSQL

Hodinové seskupování řádků pomocí Django

Chcete-li to opravit, přidejte order_by() do dotazovacího řetězce. Tím přepíšete výchozí řazení modelu Meta . Takhle:

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

V mém prostředí (také Postgres):

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

Další informace naleznete v order_by django docs :

Poznámka :pomocí extra() může zavést zranitelnost vkládání SQL na váš kód. Používejte to s opatrností a opusťte všechny parametry, které může uživatel zavést. Porovnat s dokumenty :




  1. Podmínka WHERE nulového vstupního parametru Oracle PL\SQL

  2. Kdy názvy sloupců nebo tabulek Postgres potřebují uvozovky a kdy ne?

  3. SQL vícenásobné vložení s Pythonem

  4. Jak uložit výsledky MySQL do souboru ve formátu tabulky