2013-01-16 7 views
5

Jetzt sortiere ich die Daten in der Datenbank nach ihrem Attribut 1. Wenn es ein Binden von verschiedenen Elementen mit demselben Wert von Attribut 1 gibt, scheinen die Daten nach ihrer ID sortiert zu sein. Allerdings möchte ich die Krawatte durch Sortieren nach DESC (ID) brechen. Wie kann ich die Standardsortierkriterien der Datenbank ändern, wenn ein Gleichstand vorliegt?Die Standardsortierkriterien von sqlalchemy?

Danke!

Antwort

7

Die Reihenfolge wird vollständig von der Datenbank bestimmt, nicht SQLAlchemy. Mit einfachem SQL fügen Sie einfach zusätzliche ORDER BY-Klauseln hinzu, in SQLAlchemy ORM machen Sie dasselbe, indem Sie die order_by-Methoden verketten. Zum Beispiel:

for eq in session.query(Equipment).order_by(Equipment.model_id).order_by(Equipment.name).all(): 
    print (eq) 

Was auch immer links ist, ist die primäre Sortierung.

+1

BTW, wie * DESC zu sortieren * mit SQLAlchemy beantwortet wird in [dieser Frage] (http://stackoverflow.com/q/4186062/851737). – schlamar

+0

Vielen Dank, das ist hilfreich !! – user1909371

8

Zumindest in SQLAlchemy v0.9.8 ist dies mit Hilfe der mapper configuration möglich.

Wenn Sie eine Benutzertabelle haben und die Datensätze bestellt immer von fullname So etwas sollte abrufen möchten funktioniert:

from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy import Column, Integer, String 

Base = declarative_base() 

class User(Base): 
    __tablename__ = 'users' 
    id = Column(Integer, primary_key=True) 
    name = Column(String) 
    fullname = Column(String) 
    password = Column(String) 

    __mapper_args__ = { 
     "order_by":fullname 
    } 

    def __repr__(self): 
     return "<User(name='%s', fullname='%s', password='%s')>" % (self.name, self.fullname, self.password) 
+1

Das Hinzufügen einer Standardreihenfolge in der Mapper-Konfiguration ist seit Version 1.1 nicht mehr gültig, da explizit "Query.order_by()" verwendet wird. –