我们说我有这两种模式:
def Client(db.Model):
id = db.Column(db.Integer, primary_key=True)
invoices = db.relationship('Invoice', backref='client')
def Invoice(db.Model):
id = db.Column(db.Integer, primary_key=True)
我想检索至少1 Client
且少于20 Invoice
的所有Invoice
。
我希望它能像这样工作:
Client.query.join(Invoice).filter(and_(Invoice.count() > 1, Invoice.count() <= 20))
甚至这样也不错:
Client.query.join(Invoice).filter(and_(count_(Invoice) > 1, count_(Invoice) <= 20))
但当然,它不能这么简单。 .count()
显然无法在那里工作,我无法在count_()
中找到sqlalchemy.func
。
答案 0 :(得分:10)
感谢同事和代码,我们得到了它的工作:
client = Client.query\
.outerjoin(Client.invoices)\
.group_by(Client)\
.having(\
func.and_(\
func.count_(Client.invoices) >= 1)\
func.count_(Client.invoices) <= 20)\
)
).all()
我希望它有所帮助!