sqlalchemy的默认排序标准?

use*_*371 8 python sqlalchemy

现在,我按照其属性1对数据库中的数据进行排序.如果存在具有相同属性值1的不同项的绑定,则数据似乎按其id排序.但是,我想通过desc(id)排序打破平局.如果存在平局,我怎么能改变数据库的默认排序标准?

谢谢!

Fra*_*uga 13

至少在SQLAlchemy v0.9.8中,这可以通过映射器配置实现.

如果你有一个用户表,并想要检索总是按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)
Run Code Online (Sandbox Code Playgroud)

  • 自1.1版以来,不推荐在mapper配置中添加默认顺序,而是明确使用`Query.order_by()`. (3认同)

Kei*_*ith 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)
Run Code Online (Sandbox Code Playgroud)

最左边的是主要类型.

  • 顺便说一句,在[这个问题](http://stackoverflow.com/q/4186062/851737)中回答了如何使用SQLAlchemy对* DESC *进行排序。 (2认同)