2
나는 다음과 같은 SQLAlchemy의 쿼리를 실행할 수 있어야합니다.SQLAlchemy의 부울 하이브리드 특성
SQLAlchemy의 모델 :
class Action(db.Model):
id = db.Column(db.Integer, primary_key=True)
action = db.Column(db.String(32))
done = db.Column(db.Boolean, default=False)
batch = db.relationship(Batch.__name__, backref='actions')
class Batch(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(255), default='unknown')
@hybrid_property
def total_actions(self):
return db.session.query(Action).join(Action.batch).filter(Batch.id == self.id).count()
@hybrid_property
def finished_actions(self):
return db.session.query(Action).join(Action.batch).filter(Batch.id == self.id).filter(Action.done).count()
@hybrid_property
def done(self):
return self.total_actions == self.finished_actions
나는에 많은 성공없이 해당 expression
을 구현했습니다. 부울 쿼리를 반환 할 수있는 방법을 이해하는 것은 어렵습니다. total_actions
및 finished_actions
모두 hybrid attributes
을하고, 따라서 done
의 expression
에서 사용할 수 없습니다
@done.expression
def done(self):
total_actions = db.session.query(func.sum(Batch.actions))
finished_actions = db.session.query(func.sum(Batch.actions.done))
return db.session.query(Batch).filter(total_actions == finished_actions)
쿼리 객체에'.as_scalar을()'를 호출 시도 – ThiefMaster