638 votes

SQLAlchemy ORDER BY DESCENDING?

Comment puis-je utiliser ORDER BY descending dans une requête SQLAlchemy comme suit?

Cette requête fonctionne, mais les renvoie dans l'ordre croissant:

 query = (model.Session.query(model.Entry)
        .join(model.ClassificationItem)
        .join(model.EnumerationValue)
        .filter_by(id=c.row.id)
        .order_by(model.Entry.amount) # This row :)
        )
 

Si j'essaie:

 .order_by(desc(model.Entry.amount))
 

alors j'obtiens: NameError: global name 'desc' is not defined .

1017voto

Rick Points 4435

Juste comme un FYI, vous pouvez également spécifier ces choses en tant qu'attributs de colonne. Par exemple, j'aurais pu faire:

 .order_by(model.Entry.amount.desc())
 

C'est pratique car vous pouvez l'utiliser sur d'autres endroits comme dans une définition de relation, etc.

443voto

AP257 Points 9131

Je l'ai:

 from sqlalchemy import desc
 

Duh!

Utilisation (d'après le commentaire de @ jpmc26):

 someselect.order_by(desc(table1.mycol))
 

98voto

Radu Points 153

Une autre chose que vous pourriez faire est:

 .order_by("name desc")
 

Cela entraînera: ORDER BY nom desc. L'inconvénient ici est le nom de colonne explicite utilisé dans l'ordre par.

14voto

Michael Points 167

Cela a fonctionné pour moi -

 db_session.query(Posts).order_by(Posts.due_date.desc())
 

BTW - c'est ce que ma classe de forme ressemble -

 class Posts(Form):
    task_id     = IntegerField('Priority')
    name        = TextField('Task Name', [Required()])
    due_date    = DateField('Date Due', [Required()])
    priority    = SelectField('Priority', [Required()], choices=[('1', '1'),('2', '2'),('3', '3'),('4', '4'),('5', '5')])
    posted_date = DateField('Posted Date', [Required()])
    status      = IntegerField('Status')
 

1voto

Rohmer Points 102

Vous pouvez utiliser les sélections génératives . Cela a fonctionné pour moi aujourd'hui quand j'ai eu le même problème.

 query = (model.Session.query(model.Entry)
    .join(model.ClassificationItem)
    .join(model.EnumerationValue)
    .filter_by(id=c.row.id))
query = query.order_by(model.Entry.amount)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X