2016-04-14 20 views
0

ben (için aynı veri setine sahip satırların, kimlik çiftleri bulmak için, bir rapor çalıştırmak çalışıyorumSQLAlchemy - Sütunlar kümesini uyan tüm Satırları alın

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 

bir tablo var Belirli bir tarih aralığında belirli bir office_type_id için state_id, district_id, office_type_id, office_class) .

şu anda var sorgusu - (kurum = 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() 

Bu işleri - bir anlamda. Geçerli sonuçları geri alırım, ancak çiftin her sürümü için bir kez, sonucu iki kez üretir. Örnek için

:

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

Sorum şu, ben zaten bir mantıksal eşdeğer çifti tarafından temsil edilmeyen tek çiftleri, dahil etmek, sorgu güncelleyebilirsiniz nasıl.

Yukarıdaki kümenin her ikisinde de [(127, 196)] veya [(196,127)] olmasını istemiyorum. geri "dönüşlü" çiftini (özdeş kimliklerinin çifti) alabilirsiniz

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

şunlar gereklidir:

cevap

1

ortak yolu okumak için

Teşekkür belirli (keyfi) sipariş empoze etmektir farklı bir şekilde uygulayın.

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

Teşekkürler m8, böyle bir şey eksik olduğunu biliyordum! – Busturdust