2013-01-16 13 views
5

Ora ordino i dati nel database per il suo attributo 1. Se c'è un pareggio di articoli diversi con lo stesso valore dell'attributo 1, i dati sembrano essere ordinati per il suo id. Tuttavia, vorrei rompere il legame ordinando per desc (id). Come posso cambiare i criteri di ordinamento predefiniti del database se c'è un pareggio?I criteri di ordinamento predefiniti di sqlalchemy?

Grazie!

risposta

7

L'ordine è interamente determinato dal database, non SQLAlchemy. Con SQL semplice basta aggiungere ulteriori clausole ORDER BY, in SQLAlchemy ORM si fa lo stesso concatenando i metodi order_by. Ad esempio:

Qualunque sia la sinistra, la maggior parte è il tipo principale.

+1

BTW, come ordinare * DESC * con SQLAlchemy di soluzione [a questa domanda] (http://stackoverflow.com/q/4186062/851737). – schlamar

+0

Grazie mille, questo è utile !! – user1909371

8

Almeno in SQLAlchemy v0.9.8 questo è possibile tramite lo mapper configuration.

Se si dispone di una tabella utente e si desidera recuperare i record sempre in ordine di fullname Qualcosa del genere dovrebbe funziona:

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

L'aggiunta di un ordinamento predefinito nella configurazione del compilatore è stata dichiarata obsoleta dalla versione 1.1 a favore dell'utilizzo esplicito di 'Query.order_by()'. –

Problemi correlati