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

Qual è l'ordine predefinito di un elenco restituito da una chiamata al filtro Django?

NESSUN ORDINE PREDEFINITO , un punto che non può essere sottolineato abbastanza perché tutti sbagliano.

Una tabella in un database non è una normale tabella html, è un insieme non ordinato di tuple. Spesso sorprende i programmatori abituati solo a MySQL perché in quel particolare database l'ordine delle righe è spesso prevedibile perché non sfrutta alcune tecniche di ottimizzazione avanzate. Ad esempio, non è possibile sapere quali righe verranno restituite o il loro ordine in nessuna delle seguenti query:

select * from table limit 10
select * from table limit 10 offset 10
select * from table order by x limit 10

Nell'ultima query, l'ordine è prevedibile solo se tutti i valori nella colonna x sono univoci. L'RDBMS è libero di restituire qualsiasi riga nell'ordine che preferisce, purché soddisfi le condizioni dell'istruzione select.

Sebbene tu possa aggiungere un ordinamento predefinito a livello di Django, il che fa sì che aggiunga una clausola order by a ogni query non ordinata:

class Table(models.Model):
    ...
    class Meta:
        ordering = ['name']

Tieni presente che potrebbe essere un freno alle prestazioni, se per qualche motivo non hai bisogno di righe ordinate.