这是在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且friends.has_next为true时,它仅返回2个结果。当它为true时(数据库中有更多项)。在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
有什么见解吗?
答案 0 :(得分:0)
您可以使用sqlalchemy_paginator
。请查看此link,以获取详细示例。
from sqlalchemy_paginator import Paginator
query = session.query(MyModel)
paginator = Paginator(query, 5)
for page in paginator:
print "page number of current page in iterator", page.number
print "this is a list that contains the records of current page", page.object_list