现在我按属性 1 对数据库中的数据进行排序。如果属性 1 的值相同的不同项目存在相同的关系,则数据似乎按其 id 排序。但是,我想通过按 desc(id) 排序来打破平局。如果有平局,我如何更改数据库的默认排序标准?
谢谢!
现在我按属性 1 对数据库中的数据进行排序。如果属性 1 的值相同的不同项目存在相同的关系,则数据似乎按其 id 排序。但是,我想通过按 desc(id) 排序来打破平局。如果有平局,我如何更改数据库的默认排序标准?
谢谢!
更新
从 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
顺序完全由数据库决定,而不是 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)
最左边的是主要排序。