与Sqlalchemy查询对象连接以扩展自定义查询类型

时间:2012-11-07 14:36:31

标签: python sql sqlalchemy

我正在为我的模型添加分页功能。我可以用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的基本机制,但我认为我只是需要将我的paginate查询添加到我正在使用的声明性Base Base中,但是一旦我回到它上面就会看到它。

1 个答案:

答案 0 :(得分:-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()宏进行渲染