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:
Teşekkürler m8, böyle bir şey eksik olduğunu biliyordum! – Busturdust