sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan forespørger jeg på længden af ​​et Django ArrayField?

extra() funktion er blevet forældet i henhold til dokumenter :

Her er, hvordan du kan gøre det samme ved at bruge en tilpasset 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')

Bemærk, at kardinalitet() funktion er tilgængelig i PostgreSQL 9.4 eller nyere. Hvis du bruger en ældre version, skal du bruge array_length() :

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

En advarsel med denne anden forespørgsel er, at et tomt array vil blive sorteret foran alle ikke-tomme. Dette kunne løses ved at samle NULL værdier fra array_length til 0.



  1. MyBatis ekstra komma i opdateringsforespørgsel

  2. SQL Server:Kommunikationsforbindelsesfejl Påkrævet SSL (kan ikke modtage pakke)

  3. Hvordan kan jeg indsætte tilfældige værdier i en SQL Server-tabel?

  4. Vis avancerede serverkonfigurationsindstillinger i SQL Server (T-SQL)