SQLAlchemy ПОРЯДОК РАСХОДА? - PullRequest
       3

SQLAlchemy ПОРЯДОК РАСХОДА?

355 голосов
/ 15 ноября 2010

Как я могу использовать ORDER BY descending в запросе SQLAlchemy, как показано ниже?

Этот запрос работает, но возвращает их в порядке возрастания:

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 :)
        )

Если я попытаюсь

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

тогда я получаю: NameError: global name 'desc' is not defined.

Ответы [ 7 ]

590 голосов
/ 15 ноября 2010

Так же, как к вашему сведению, вы также можете указать эти вещи в качестве атрибутов столбца.Например, я мог бы сделать:

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

Это удобно, поскольку вы можете использовать его в других местах, таких как определение отношений и т. Д.1006 * см. Это

309 голосов
/ 15 ноября 2010
from sqlalchemy import desc
someselect.order_by(desc(table1.mycol))

Использование от @ jpmc26

70 голосов
/ 01 апреля 2012

Еще одна вещь, которую вы можете сделать:

.order_by("name desc")

Это приведет к: ORDER BY name desc.Недостатком здесь является явное имя столбца, используемое в порядке.

18 голосов
/ 24 февраля 2017

Вы можете использовать .desc() функцию в вашем запросе, как это

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

Это будет порядок по сумме в порядке убывания или

query = session.query(
    model.Entry
).join(
    model.ClassificationItem
).join(
    model.EnumerationValue
).filter_by(
    id=c.row.id
).order_by(
    model.Entry.amount.desc()
)
)
3 голосов
/ 15 мая 2019

Вы можете попробовать: .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()
1 голос
/ 28 августа 2018

Дополняет при ответе @Radu. Как и в SQL, вы можете добавить имя таблицы в параметр, если у вас много таблиц с одним и тем же атрибутом.

.order_by("TableName.name desc")
0 голосов
/ 11 декабря 2018

Мы можем сделать это несколькими способами. Самым простым будет сделать это следующим образом -

res=ModelName.query.filter(ModelName.var1==cond).order_by(ModelName.var1.desc())

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...