現在我按數據庫屬性1對數據庫中的數據進行排序。 如果存在具有相同屬性1值的不同項目的聯繫,則數據似乎按其ID排序。 但是,我想通過desc(id)排序來打破領帶。如果存在聯繫,我如何更改數據庫的默認排序標準?sqlalchemy的默認排序標準?
謝謝!
現在我按數據庫屬性1對數據庫中的數據進行排序。 如果存在具有相同屬性1值的不同項目的聯繫,則數據似乎按其ID排序。 但是,我想通過desc(id)排序來打破領帶。如果存在聯繫,我如何更改數據庫的默認排序標準?sqlalchemy的默認排序標準?
謝謝!
該命令完全由數據庫決定,而不是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)
無論哪個是最左邊的都是主要排序。
至少在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開始,已棄用了映射器配置中的默認排序,以支持顯式使用'Query.order_by()'。 –
BTW,如何排序* DESC *與SQLAlchemy的是[這個問題]回答( http://stackoverflow.com/q/4186062/851737)。 – schlamar
非常感謝,這是有幫助的! – user1909371