2
は、私は次のSQLAlchemyのクエリを実行できるようにしたい:SQLAlchemyのブールハイブリッド属性
q_done = Batch.query.filter(Batch.done)
q_running = Batch.query.filter(~Batch.done)
をしかし、私は私のdone
ハイブリッド属性に対応するexpression
を書くのまわりで私の頭をラップすることはできません。
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
を実装しようとしました。ブール値のクエリを返す方法を理解することは難しいです。
@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