PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Quel est l'ordre par défaut d'une liste renvoyée par un appel de filtre Django ?

Il n'y a AUCUNE COMMANDE PAR DÉFAUT , un point sur lequel on ne saurait assez insister car tout le monde s'y prend mal.

Une table dans une base de données n'est pas une table HTML ordinaire, c'est un ensemble non ordonné de tuples. Cela surprend souvent les programmeurs uniquement habitués à MySQL, car dans cette base de données particulière, l'ordre des lignes est souvent prévisible car elle ne tire pas parti de certaines techniques d'optimisation avancées. Par exemple, il n'est pas possible de savoir quelles lignes seront renvoyées, ni leur ordre dans aucune des requêtes suivantes :

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

Dans la dernière requête, l'ordre n'est prévisible que si toutes les valeurs de la colonne x sont uniques. Le SGBDR est libre de renvoyer toutes les lignes dans l'ordre de son choix tant qu'il satisfait aux conditions de l'instruction select.

Bien que vous puissiez ajouter un ordre par défaut au niveau de Django, ce qui l'amène à ajouter une clause order by à chaque requête non ordonnée :

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

Notez que cela peut nuire aux performances si, pour une raison quelconque, vous n'avez pas besoin de lignes ordonnées.