2012-10-18 3 views
0

코드에서 포커스를 변경 했으므로 더 이상 필요하지 않습니다. (대답에 내 코멘트를 참조하십시오) 나중에 참조 할 답변을 게시하십시오 ...sqlalchemy 자식 필드 order_by on backref

아이의 필드로 정렬 된 하나의 많은 backref에서 결과를 검색하려면 어떻게합니까? 색인에 따라 주문 된 신분증에 대해 모든 일을해야합니다. 그러나 이번에는 ms SQL 서버에서 명령을 받더라도 무작위로 검색됩니다. Turbogears의 root.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) 

: GID 정렬되지 않은에 대한

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

반환 모든 일도

나는 TurboGears 2 datamodels.py 있습니다.

답변

1

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

편집 : 당신이 관계를 사용할 때relationship()accepts a keyword argument order_by하는 인스턴스를 주문합니다. 반대 방향의 순서를 지정하려면 backref 키워드 대신 backref() function을 사용하고 relationship()과 동일한 order_by 키워드 인수를 사용할 수 있습니다.

+0

그러나 더 이상 역 참조로 사용되지 않지만 개별 쿼리가되고 컨텍스트 dict 또는 Parcel 쿼리에 추가되어야합니다. 이미 Parcel 쿼리에 추가 된 backref를 정렬하는 방법을 찾고 있습니다. 자체 쿼리 이외의 다른 방법을 사용하는 쉬운 방법이 없을 수 있습니다. – stuartz

+0

나는 내 대답을 편집했다. 그게 도움이 되니? – Simon

+0

나는 어린이의 들판에서 주문할 수 없었습니다. 역 참조 (backref)는 부모로부터의 필드에 의해 자식을 명령했습니다. 그리고 나는 backref = backref()가 제대로 작동하지 못하게했다. 나는 분리 된 쿼리를했다. .. 너무 많은 정보가 turbogears를 추락시키는 원인이 될 때를 제외하고 나는 또한 올바르게 일하고 있었던 다른 관계에 관해서도했다. 개별 쿼리가 더 빨리 실행되는 것처럼 보였고 충돌을 방지했습니다. 응답 해 주셔서 감사합니다. – stuartz