4

我正在为我的模型添加分页功能。我可以使用mixin中的方法来做到这一点,我想我理解在这种情况下分页是什么,但我正在寻找添加查询,以便我可以在任何我想要的地方传递分页,而无需硬编码模型方法并且没有mixin例如:

Mymodel.query.filter(Mymodel.attr=='X').paginate(**args, **kwargs)

flask-sqlalchemy 这样做,但我没有使用它,尽管我已经尝试过它以尝试提取一些功能。

所以如果我有这样的方法:

def paginate(self, page, per_page=20):
        items = self.limit(per_page).offset((page - 1) * per_page).all()
        return Pagination(self, page, per_page, self.count(), items)

如何在 sqlalchemy 查询链中将其作为带有接口的东西插入和输出?我有点做并且不遵循它在flask-sqlalchemy中是如何完成的,但我想提取/学习如何做到这一点并在未来更好地控制查询,改进我对sqlalchemy的使用,所以我不完全知道我要去哪里,只是问一个问题,然后从那里开始。

长答案:继续阅读 sqlalchemy 文档和代码,直到我获得更深入的理解。我正在寻找扩展 orm.Query - 我已经完成了,但我不知道如何将它与我的项目联系起来,因为我不了解 sqlalchemy 的底层机制,但我认为我只需要将我的分页查询添加到我正在使用的声明性基础 Base 中,但一旦我重新开始工作就会看到。

4

1 回答 1

-2

你读过这个吗?

http://packages.python.org/Flask-SQLAlchemy/api.html?highlight=pagination#flask.ext.sqlalchemy.Pagination

它清楚地解释了要在烧瓶中使用带有 sqlalchemy 扩展的分页,您可以这样做:

class flask.ext.sqlalchemy.Pagination(query, page, per_page, total, items)¶

在您的具体情况下,您可以执行以下操作:

myquery = Mymodel.query.filter(Mymodel.attr=='X')
pagination = Pagination(myquery,page,per_page,total,items)

然后在您的模板中,您可以使用此分页对象使用 render_pagination() 宏进行渲染

于 2012-11-07T20:22:00.550 回答