【发布时间】:2020-02-05 21:40:43
【问题描述】:
这是Strange paginate behaviour when paginating a subquery in flask 中发布的问题的简化版本。
我需要对以下查询的结果进行分页并显示结果:
sub = db.session.query(Magazine).join(Magazine.subscribers).filter(User.id == 2).subquery()
subscribers = db.session.query(User).select_from(sub).join(Magazine.subscribers)
我尝试使用以下代码:
page=request.args.get('page', 1, type=int)
friends=subscribers.paginate(page, 3, False)
next_url=url_for('index', page=friends.next_num) if friends.has_next else None
prev_url=url_for('index', page=friends.prev_num) if friends.has_prev else None
return render_template("index.html", title="My friends", friends=friends.items, next_url=next_url, prev_url=prev_url)
这给出了一个奇怪的结果。首先,当询问 3 个结果时,它只返回 2 个结果,而当它应该为 true 时,friends.has_next 为 false(数据库中有更多项目)。在Strange paginate behaviour when paginating a subquery in flask 中有更多详细信息以及我运行的测试。我怀疑错误来自子查询。我错过了什么明显的东西吗??!!!
在以下示例中,我使用烧瓶外壳中的一些“假”数据:
>>> sub = db.session.query(Magazine).join(Magazine.subscribers).filter(User.id == 2).subquery()
>>> subscribers = db.session.query(User).select_from(sub).join(Magazine.subscribers)
>>> friends=subscribers.paginate(1, 3, False)
>>> subscribers.all()
[<User 2>, <User 3>, <User 4>, <User 5>, <User 6>]
>>> friends.items
[<User 2>, <User 3>]
>>> friends.has_next
False
>>> friends.has_prev
False
有什么见解吗?
【问题讨论】:
标签: python flask sqlalchemy pagination