【发布时间】:2012-12-30 22:34:14
【问题描述】:
现在我按属性 1 对数据库中的数据进行排序。 如果属性 1 的值相同的不同项目存在并列,则数据似乎按其 id 排序。 但是,我想通过按 desc(id) 排序来打破平局。如果出现平局,如何更改数据库的默认排序标准?
谢谢!
【问题讨论】:
标签: python sqlalchemy
现在我按属性 1 对数据库中的数据进行排序。 如果属性 1 的值相同的不同项目存在并列,则数据似乎按其 id 排序。 但是,我想通过按 desc(id) 排序来打破平局。如果出现平局,如何更改数据库的默认排序标准?
谢谢!
【问题讨论】:
标签: python sqlalchemy
更新
从 1.1 版开始,映射器配置 has been deprecated 中的 order_by 参数。而是必须使用 Query.order_by。
出于历史目的,我将原始答案留在这里:
这可以通过[映射器配置][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
【讨论】:
Query.order_by()。
desc 以防你需要它__mapper_args__ = { "order_by": id.desc() }
顺序完全由数据库决定,而不是 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)
最左边的是主排序。
【讨论】: