SQLAlchemy ORDER BY DESCENDING?

Как я могу использовать 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.

Ответ 2

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

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

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

Для получения дополнительной информации, вы можете отослать это

Ответ 3

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

.order_by("name desc")

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

Ответ 4

Вы можете использовать .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()
)
)

Ответ 5

Вы можете попробовать: .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()

Ответ 6

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

.order_by("TableName.name desc")

Ответ 7

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

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