2017-10-23 10 views
0

私は他の人に1つの持つのForeignKeyを持つ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() 
関連する問題