2012-10-18 63 views
0

當我更改代碼中的焦點時,不再需要應答。 (請參閱我在回答中的評論)發佈答案以供將來參考...sqlalchemy子字段order_by backref

如何從子項中的字段排序的一個到多個backref檢索結果?我需要按索引排序的gid。但是在這個時候,即使它們是在ms sql服務器中訂購的,它們也是隨機檢索的。

我在TurboGears中2 datamodels.py:

`class Parcel(DeclarativeBase): 
    __tablename__ = 'GENERAL' 
    __table_args__ = ({'autoload': True}) 

    gid = Column(Integer, primary_key=True)` 
    somethings = relationship('Something', backref='Parcel') 

'class Something(DeclarativeBase): 
    __tablename__ = 'SKETCH' 
    __table_args__ = ({'autoload': True}) 

    gid = Column(Integer, ForeignKey('GENERAL.gid'), primary_key=True) 
    index = Column(Integer, primary_key=True) 

在TurboGears中root.py:

query = DBSession.query(Parcel) 
query = query.options(joinedload('somethings') 
query=session.filter(Parcel.gid==gid) 

返回所有出頭的GID無序。

回答

1

DBSession.query(Something).filter_by(gid=gid).order_by(Something.index).all()

編輯:relationship()accepts a keyword argument order_by當您使用的關係,單實例。如果要指定相反方向的順序,則可以使用backref() function而不是backref關鍵字,並使用與relationship()一樣的order_by關鍵字參數。

+0

但它不再被用作backref,而是變成單個查詢,並且需要添加到上下文字典或Parcel查詢中。我正在尋找一種方法來訂購已添加到Parcel查詢中的backref。除了自己的查詢以外,可能沒有簡單的方法來完成它。 – stuartz

+0

我明白了,我編輯了我的答案。這有幫助嗎? – Simon

+0

我從來沒有能夠按照孩子的領域排序。 backref通過來自父級的字段對孩子進行排序。而且我無法使backref = backref()也能正常工作。我最終做了單獨的查詢...我也對其他關係正常工作,除非信息過多導致渦輪機發生故障。個人查詢似乎運行得更快,並防止崩潰。感謝您的迴應。 – stuartz