【问题标题】:paginate a subquery in flask在烧瓶中对子查询进行分页
【发布时间】: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


    【解决方案1】:

    您可以使用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-06
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      • 2017-09-15
      • 1970-01-01
      相关资源
      最近更新 更多