2016-04-14 15 views
0

私は(のためのデータの同じセットを持つ行の、IDのペアを見つけるために、レポートを実行しようとしていますSQLAlchemyの - 一連の列に一致したすべての行を取得

class Term(CommonFunctions, Base): 
    __tablename__ = 'terms' 

    id = Column(Integer, primary_key=True,autoincrement=True) 
    term_begin = Column(Date, nullable=False) 
    term_end = Column(Date) 
    term_served = Column(Integer) # term_number # calculatable? 
    office_type_id = Column(Integer, ForeignKey(OfficeType.id)) 
    office_type = relationship('OfficeType', backref='terms') 
    state_id = Column(Integer, ForeignKey(State.id)) 
    state = relationship('State', backref='terms') 
    district_id = Column(Integer, ForeignKey(District.id)) 
    district = relationship('District', backref='terms') 
    office_class = Column(Integer) 
    # ... other fieldds 

テーブルに持っていますstate_id、district_id、office_type_id、office_class) 特定の日付範囲内の特定のoffice_type_idです。

私が今持っているクエリ - (機関= office_type_id)

date = request.args.get('date') 
institution = request.args.get('institution') 
term_alias = aliased(schema.Term) 
composition = Session.query(schema.Term.id, term_alias.id).\ 
    filter(schema.Term.id != term_alias.id).\ 
    filter(schema.Term.office_class == term_alias.office_class).\ 
    filter(schema.Term.state_id == term_alias.state_id).\ 
    filter(schema.Term.office_type_id == term_alias.office_type_id).\ 
    filter(schema.Term.office_type_id == institution).\ 
    filter(schema.Term.office_class != 0).\ 
    filter(and_(schema.Term.term_begin <= date, or_(schema.Term.term_end >= date, 
                      schema.Term.term_end == None))).\ 
    all() 

これは動作します - 意味で。私は有効な結果を得ていますが、ペアの各バージョンごとに2回、結果を2回再生します。例については

[(127,196), (196,127)]

私の質問があり、私はすでに論理的に等価ペアで表現されていないだけでペアを含むように、クエリを更新するにはどうすればよいです。

私は[(127, 196)]または[(196,127)]のいずれかであることを希望します。あなたは「反射的」ペア(同じIDのペア)を取り戻すことができれば、あなたが必要

Session.query(...).filter(..., schema.Term.id < term_alias.id) 

:一般的な方法は、特定の(任意)の順序を課すことがある

答えて

1

を読み取るための

感謝別個にも適用する。

Session.query(...).filter(..., schema.Term.id < term_alias.id).distinct() 
+0

ありがとうございましたm8、私はそのようなものが不足していたことを知っていました! – Busturdust