2013-01-16 28 views
5

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

谢谢!

回答

7

该命令完全由数据库决定,而不是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) 

无论哪个是最左边的都是主要排序。

+1

BTW,如何排序* DESC *与SQLAlchemy的是[这个问题]回答( http://stackoverflow.com/q/4186062/851737)。 – schlamar

+0

非常感谢,这是有帮助的! – user1909371

8

至少在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

从版本1.1开始,已弃用了映射器配置中的默认排序,以支持显式使用'Query.order_by()'。 –