SQLAlchemy中相关和过滤的计数



我有一个对象Services,对象Services有一个对象waiter的外键。对象waiter也有一个时间字段' exit ';它必须小于当前时间。其思想是返回所有对象Waiter,并计算与之相关的对象服务的字段出口大于当前时间的对象服务的数量。然后我必须对Tables做同样的操作。

最后,我需要过滤掉当前拥有四个或更多当前服务的侍者,并且我必须过滤掉具有一个或多个当前服务的表。

这些是我的模型:

class Waiter(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(128))
service = db.relationship('Service', backref='waiter', lazy=True)
class Table(db.Model):
id = db.Column(db.Integer, primary_key=True)
table_no = db.Column(db.String(128))
service = db.relationship('Service', backref='table', lazy=True)

class Service(db.Model):
id = db.Column(db.Integer, primary_key=True)
table = db.Column(db.Integer, db.ForeignKey('table.id'))
waiter = db.Column(db.Integer, db.ForeignKey('waiter.id'))
arrival = db.Column(db.DateTime, default=datetime.datetime.now(mx))
exit = db.Column(db.DateTime)
tip = db.Column(db.Numeric(10,2))

到目前为止,我得到了这样的内容:

waiters = Waiter.query(Waiter.id, 
func.count(*"I don't know what to put  here"*).
label("service_count")).groupby(Waiter.id).subquery()

编辑:

经过进一步的研究,我得出以下问题。我还是不知道这是不是对的:

waiters = Waiter.query(Waiter.id, 
func.count("*").filter(Service.exit>=datetime.datetime.now()) .
label("service_count")).groupby(Waiter.id).subquery()
任何帮助都是非常感激的。非常感谢。

我得到了一个答案,它做了我想要的,但不是一个注释,我得到了一个值元组。它是这样的:

waiters = db.session.query(Waiter, func.count(Service.id).
filter(Service.exit>time)).
outerjoin(Service).group_by(Waiter).all()

返回如下内容:

[(<Waiter 1>, 0)]

最新更新