有人能帮上忙吗?我有一个问题(见下文)
dets = config.Se.query(db.A).filter(db.B.clientref != None,
db.A.id == db.B.clientref,
db.A.ignored == False).\
order_by(desc(db.B.date_lts))
if _querya != ():
tmp_dets = dets.filter(*_querya)
dets = tmp_dets
d_results2 = dets.limit(300).all()
d_results = dets.all()
print len(d_results2), len(d_results)在我的测试查询中,print语句返回4 5。
我做错了什么?我只从表A中进行选择(即使我使用与A具有多对一关系的表B来限制和排序结果集)。假设表A包含客户,表B包含包括date_lts (最后一次看到)的订单,我希望对结果集进行排序,以便最先显示具有最新订单的客户。
我们可以忽略_querya。它允许设置额外的过滤器来查询,这样就可以很好地工作。
我希望将表A中的结果集限制在最多300行,以避免在用户设置过宽的查询参数时GUI阻塞。然而,我注意到,一个测试查询应该返回5行(从数据库确认),但只返回4行。
为了进行调试,我将原始查询结果集重命名为d_results2,并创建了无限制的d_results (300)。我能看出不同之处。d_results2被限制为四个。
怎么一回事?我假设limit(300)不会做任何事情,因为整个结果集只有五行。
Hannu
发布于 2017-06-30 20:44:35
多亏了Ilja的评论,这个问题比我想象的要复杂一点,但最终还是成功地解决了。如果有人感兴趣,这是现在的查询:
dets = config.Se.query(db.A, db.B).join(db.B).distinct(db.A.id).\
filter(db.B.clientref != None,
db.A.id == db.B.clientref,
db.A.ignored == False).order_by(db.A.id)
if _querya != ():
tmp_dets = dets.filter(*_querya)
dets = tmp_dets
d_results = dets.from_self().order_by(db.B.date_lts.desc()).limit(300).all()这似乎是可行的。
Hannu
https://stackoverflow.com/questions/44844574
复制相似问题