PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Was ist die Standardreihenfolge einer Liste, die von einem Django-Filteraufruf zurückgegeben wird?

Es gibt KEINE STANDARDBESTELLUNG , ein Punkt, der nicht genug betont werden kann, weil jeder es falsch macht.

Eine Tabelle in einer Datenbank ist keine gewöhnliche HTML-Tabelle, sondern eine ungeordnete Menge von Tupeln. Es überrascht oft Programmierer, die nur an MySQL gewöhnt sind, da in dieser bestimmten Datenbank die Reihenfolge der Zeilen oft vorhersehbar ist, da einige fortschrittliche Optimierungstechniken nicht genutzt werden. Beispielsweise ist es nicht möglich zu wissen, welche Zeilen zurückgegeben werden, oder ihre Reihenfolge in einer der folgenden Abfragen:

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

In der letzten Abfrage ist die Reihenfolge nur vorhersagbar, wenn alle Werte in Spalte x eindeutig sind. Das RDBMS kann beliebige Zeilen in beliebiger Reihenfolge zurückgeben, solange es die Bedingungen der select-Anweisung erfüllt.

Sie können jedoch eine Standardreihenfolge auf der Django-Ebene hinzufügen, die dazu führt, dass jeder nicht geordneten Abfrage eine order by-Klausel hinzugefügt wird:

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

Beachten Sie, dass dies die Leistung beeinträchtigen kann, wenn Sie aus irgendeinem Grund keine geordneten Zeilen benötigen.