web-dev-qa-db-fra.com

Python SqlAlchemy order_by DateTime?

J'utilise SqlAlchemy pour stocker certains objets avec un champ DateTime:

my_date = Field(DateTime())

Je voudrais exécuter une requête pour récupérer les quelques objets les plus récents (Entités avec le champ my_date qui sont les plus récentes).

J'ai essayé ce qui suit:

entities = MyEntity.query.order_by(MyEntity.time).limit(3).all()
entities = MyEntity.query.order_by(-MyEntity.time).limit(3).all()

Mais ces requêtes renvoient les mêmes objets dans le même ordre. La documentation SqlAlchemy note l'utilisation du '-' pour inverser l'ordre, mais il me manque sûrement quelque chose ici.

Quelqu'un peut-il aider?

31
jimt

Vous pouvez le faire comme ceci:

entities = MyEntity.query.order_by(desc(MyEntity.time)).limit(3).all()

Vous devrez peut-être:

from sqlalchemy import desc

Voici ne documentation .

Une autre option est la suivante:

stmt = select([users_table]).order_by(users_table.c.name.desc())
60
thirtydot
entities = MyEntity.query.order_by(MyEntity.my_date.desc()).limit(3).all()

devrait marcher.

7
X. Gantan

J'utilise sqlalchemy régulièrement afin de pouvoir confirmer que la réponse de thirtydot est correcte, vous devez utiliser sqlalchemy.sql.desc à la place du - opérateur pour influencer le order_by.

1
albertov