web-dev-qa-db-fra.com

SQLAlchemy ORDER BY DESCENDING?

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

Cette requête fonctionne, mais les retourne 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'essaye:

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

alors je reçois: NameError: global name 'desc' is not defined.

362
AP257
from sqlalchemy import desc
someselect.order_by(desc(table1.mycol))

sage de @ jpmc26

316
AP257

Comme pour votre information, vous pouvez également spécifier ces éléments sous forme d'attributs de colonne. Par exemple, j'aurais peut-être fait:

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

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

Pour plus d'informations, vous pouvez reportez-vous à ceci

601
Rick

Une autre chose que vous pourriez faire est:

.order_by("name desc")

Cela se traduira par: ORDER BY name desc. L’inconvénient est le nom de colonne explicite utilisé dans l’ordre.

72
Radu

Vous pouvez utiliser la fonction .desc() dans votre requête comme ceci

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

Ceci sera ordonné par montant en ordre décroissant ou

query = session.query(
    model.Entry
).join(
    model.ClassificationItem
).join(
    model.EnumerationValue
).filter_by(
    id=c.row.id
).order_by(
    model.Entry.amount.desc()
)
)
21
anand tripathi

Vous pouvez essayer: . Order_by (ClientTotal.id.desc ())

session = Session()
auth_client_name = 'client3' 
result_by_auth_client = session.query(ClientTotal).filter(ClientTotal.client ==
auth_client_name).order_by(ClientTotal.id.desc()).all()

for rbac in result_by_auth_client:
    print(rbac.id) 
session.close()
8
Artem Baranov

Complémentaire à @Radu answer, comme en SQL, vous pouvez ajouter le nom de la table dans le paramètre si vous avez plusieurs tables avec le même attribut.

.order_by("TableName.name desc")
1
Michael