8

现在我按属性 1 对数据库中的数据进行排序。如果属性 1 的值相同的不同项目存在相同的关系,则数据似乎按其 id 排序。但是,我想通过按 desc(id) 排序来打破平局。如果有平局,我如何更改数据库的默认排序标准?

谢谢!

4

2 回答 2

19

更新

从 1.1 版order_by开始,映射器配置中的参数已被弃用。相反,必须使用Query.order_by 。

出于历史目的,我在这里留下了原始答案

这可以通过 [mapper 配置][1] 来实现。

如果您有一个用户表并且想要检索始终按以下顺序排序的记录fullname应该可以:

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    fullname = Column(String)
    password = Column(String)

    __mapper_args__ = {
        "order_by": fullname,
    }
    
    def __repr__(self):
       return f"<User(id='{self.id}', name='{self.name}', fullname='{self.fullname}')>"

默认order_by是升序,如果你想颠倒顺序,可以使用:

__mapper_args__ = {
    "order_by": fullname.desc(),
}




  [1]: http://docs.sqlalchemy.org/en/latest/orm/mapping_api.html#sqlalchemy.orm.mapper.params.order_by
于 2015-02-27T12:10:16.617 回答
8

顺序完全由数据库决定,而不是 SQLAlchemy。使用纯 SQL,您只需添加额外的 ORDER BY 子句,在 SQLAlchemy ORM 中,您可以通过链接 order_by 方法来执行相同的操作。例如:

for eq in session.query(Equipment).order_by(Equipment.model_id).order_by(Equipment.name).all():
    print (eq)

最左边的是主要排序。

于 2013-01-16T15:17:15.360 回答