2017-10-23 5 views
0

나는 다른 사람에게 일을 갖는 외래 키 3 개 테이블이 :관계에 대해 + 수를 조건으로 필터링하는 방법은 무엇입니까?

class Audio(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    annotations = db.relationship('Annotation', backref='audio', lazy='dynamic') 
    # ... 

class User(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    annotations = db.relationship('Annotation', backref='user', lazy='dynamic') 
    # ... 

class Annotation(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    audio_id = db.Column(db.Integer, db.ForeignKey('audio.id'), nullable=False) 
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) 

가 어떻게 Annotation.audio_id == Audio.id을 가진 주석의 부분 집합 S에 대해 우리는 또한 S가되도록 모든 오디오 항목을 얻을 수 있습니다 .distinct (Annotation.user_id) < N?

답변

0

작동 :

q = db.session.query(Annotation.audio_id, db.func.count(Annotation.user_id.distinct()).label('count')).group_by(Annotation.audio_id).subquery() 
results = db.session.query(Audio).join(q, q.c.audio_id == Audio.id).filter(q.c.count<2).all()