[python] SQLAlchemy 주문에 의한 주문?

descending다음과 같은 SQLAlchemy 쿼리에서 ORDER BY 를 어떻게 사용할 수 있습니까?

이 쿼리는 작동하지만 오름차순으로 반환합니다.

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.



답변

참고로, 항목을 열 속성으로 지정할 수도 있습니다. 예를 들어, 다음을 수행했을 수 있습니다.

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

이것은 피하기 때문에 편리합니다 import 하며 관계 정의 등의 다른 위치에서 사용할 수 있습니다.

자세한 내용은 다음을 참조하십시오


답변

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

@ jpmc26의 사용법


답변

당신이 할 수있는 또 하나의 일은 :

.order_by("name desc")

결과 : ORDER BY name desc. 여기서 단점은 순서대로 사용되는 명시 적 열 이름입니다.


답변

.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()
)
)

SQLAlchemy의 desc 기능 사용

from sqlalchemy import desc
query = session.query(
    model.Entry
).join(
    model.ClassificationItem
).join(
    model.EnumerationValue
).filter_by(
    id=c.row.id
).order_by(
    desc(model.Entry.amount)
)
)

공식 문서의 경우 링크 하거나 아래 스 니펫을 확인하십시오.

sqlalchemy.sql.expression.desc (column) 내림차순 ORDER BY 절 요소를 생성합니다.

예 :

from sqlalchemy import desc

stmt = select([users_table]).order_by(desc(users_table.c.name))

다음과 같이 SQL을 생성합니다.

SELECT id, name FROM user ORDER BY name DESC

desc () 함수는 모든 SQL 표현식에서 사용할 수있는 독립형 버전의 ColumnElement.desc () 메소드입니다.

stmt = select([users_table]).order_by(users_table.c.name.desc())

매개 변수 column – desc () 작업을 적용 할 ColumnElement (예 : 스칼라 SQL 식)입니다.

또한보십시오

asc ()

nullsfirst ()

nullslast ()

Select.order_by ()


답변

당신은 시도 할 수 있습니다: .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()


답변

@Radu의 보완 답변, SQL에서와 같이 동일한 속성을 가진 테이블이 많은 경우 매개 변수에 테이블 이름을 추가 할 수 있습니다.

.order_by("TableName.name desc")


답변