sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur frågar jag längden på ett Django ArrayField?

extra() funktionen har fasats ut enligt dokument :

Så här kan du göra samma sak med en anpassad Annotation funktion:

from django.db import models

class ArrayLength(models.Func):
    function = 'CARDINALITY'

MyModel.objects.all().annotate(field_len=ArrayLength('field')).order_by('field_len')

Observera att kardinalitet() funktionen är tillgänglig i PostgreSQL 9.4 eller senare. Om du använder en äldre version måste du använda array_length() :

MyModel.objects.all().annotate(field_len=Func(F('field'), 1, function='array_length')).order_by('field_len')

En varning med denna andra fråga är att en tom array kommer att sorteras framför alla icke-tomma. Detta skulle kunna lösas genom att sammanföra NULL värden från array_length till 0.



  1. MySQL, utf8_general_ci &kyrilliska tecken

  2. Hur startar man MySQL med --skip-grant-tables?

  3. Mysql FROM_UNIXTIME som UTC

  4. Kan jag använda multithreading med Perls DBI och Oracle?