Hoe kan ik meerdere “order_by” doen in Flask-SQLAlchemy?

Stel dat ik een User-model heb met de velden popularityen date_created. Ik wil de volgende query uitvoeren:

SELECT * FROM user ORDER BY popularity DESC, date_created DESC LIMIT 10

In SQLAlchemy werkt dit voor een enkele:

User.query.order_by(User.popularity.desc()).limit(10).all()

Moet ik nog een order_by()toevoegen? Of zet zowel popularityals date_createdin mijn huidige order_by()?

Ik wil dat popularityvoorrang krijgt op date_createdom te bestellen.


Antwoord 1, autoriteit 100%

Dit zou moeten werken

User.query.order_by(User.popularity.desc(), User.date_created.desc()).limit(10).all()

Antwoord 2

Wat u ook zou kunnen doen:

from sqlalchemy import and_, or_
User.query.order_by(and_(User.popularity.desc(), User.date_created.desc())).all()

Opmerking: and_en or_komen uit de sqlalchemy-bibliotheek en niet uit de flask_sqlalchemy-bibliotheek.
sqlalchemy is een afhankelijkheid voor flask_sqlalchemy, dus je zou goed moeten zijn.

LTS: je kunt sqlalchemy lib mixen met flask_alchemy lib


Antwoord 3

Je kunt sqlalchemy.sql.textook als volgt gebruiken:

from sqlalchemy.sql import text
User.query.order_by(text("popularity desc, date_created desc")).limit(10).all()

Antwoord 4

Ik heb nog een voorbeeld:

user = User.query.order_by(User.id.desc()).limit(10).all()
s.t

Gebruiker is mijn klas db.Modle

Other episodes