我正在处理一个依赖于另一个查询结果的查询这是我的问题:是否可以使用另一个查询的结果来筛选查询?
我有两个表,我想通过连接它们来查询它们。我尝试了这个查询:
# Get all data for a particular country
de_market= db.session.query(
func.count(certificate.id),
func.month(certificate.creation_time).label('month'),
func.year(certificate.creation_time).label('year')).join(B2cCustomer.certificates).group_by(func.month(certificate.creation_time),
func.year(certificate.creation_time))
.filter(certificate.report_sent != None)
.filter(B2cCustomer.market == market_code)
.all()
所以在结果之后,我想再次过滤结果:
# filter the country data by the different msm campaign
get_data_based_on_msm = de_market.filter(certifcate.msm == msm).all()
我这样做了,但没有得到好的结果。有更好的方法吗?
是否可以使用另一个查询的结果来筛选查询?
是。
嗯,有点。
您写道:
de_market = db.session.query(
...
.filter(certificate.report_sent != None)
.filter(B2cCustomer.market == market_code)
.all()
# and then expressed an interest in
de_market.filter(certificate.msm == msm).all()
也就是说,我们分配q = ... .filter(cond1).filter(cond2)
后来我们对CCD_ 2感兴趣。
你能做到吗?对现在,美中不足的是。您最终使用.all()
检索了结果行。我的建议是不要那样做。
克隆查询,编写返回这样的查询的助手函数,执行您必须执行的操作,使未执行的查询可用。
有了这些,是的,你可以很容易地添加额外的过滤器。以下是一些惯用用法:
q = ... .filter(cond1).filter(cond2)
if cond3:
q = q.filter(cond3)
if limit:
q = q.limit(limit)
return q
但一旦您要求使用CCD_ 4的结果,所有的赌注都被取消了,之后您就不能修改查询了。