现在我按照属性1对数据库中的数据进行排序。 如果存在具有相同属性1值的不同项的关系,则数据似乎按其id排序。 但是,我想通过desc(id)排序打破平局。如果存在平局,我怎么能更改数据库的默认排序标准?
谢谢!
答案 0 :(得分:13)
至少在SQLAlchemy v0.9.8中,这可以通过mapper configuration实现。
如果您有一个用户表,并希望检索始终按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 "<User(name='%s', fullname='%s', password='%s')>" % ( self.name, self.fullname, self.password)
答案 1 :(得分: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)
最左边的是主要排序。