Python 与Sqlalchemy查询对象接口以扩展自定义查询类型
我正在为我的模型添加分页功能。我可以用mixin中的方法来实现这一点,我想我理解在这种情况下分页是什么,但我希望添加查询,这样我就可以在任何地方传递分页,而无需硬编码模型方法和mixin,例如:Python 与Sqlalchemy查询对象接口以扩展自定义查询类型,python,sql,sqlalchemy,Python,Sql,Sqlalchemy,我正在为我的模型添加分页功能。我可以用mixin中的方法来实现这一点,我想我理解在这种情况下分页是什么,但我希望添加查询,这样我就可以在任何地方传递分页,而无需硬编码模型方法和mixin,例如: Mymodel.query.filter(Mymodel.attr=='X').paginate(**args, **kwargs) flask sqlalchemy可以做到这一点,但我没有使用它,尽管我已经对它进行了检查,试图提取一些功能 如果我有类似的方法: def paginate(self,
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查询链中将其作为具有进出接口的东西插入?我有点了解sqlalchemy,也有点不了解它是如何在flask sqlalchemy中实现的,但我想提取/学习如何做到这一点,以及将来对查询的更多控制,完善我对sqlalchemy的使用,所以我不确切知道我将如何使用它,只是问一个问题并从那里开始
详细回答:继续阅读sqlalchemy文档和代码,直到我获得更多的理解。我希望扩展orm.Query——我已经完成了,但我不知道如何将其与我的项目联系起来,因为我不理解sqlalchemy的基本机制,但我认为我只需要将我的分页查询添加到我正在使用的声明性基中,但一旦我重新开始工作,就会看到 你读过这个了吗 它清楚地解释了要在flask中使用带有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()宏进行渲染这一点我理解,也没有问题,所以也许我应该澄清一下。我希望能够操纵查询对象,使使用“分页”在链中的任何一点都可行。Basequery.paginate返回这个,我已经有了paginate类的想法。换句话说,我希望避免对每个模型的小p分页查询进行硬编码,而是构建一种扩展orm.query的方法,就像我看到的flask sqla一样。我希望自己做Basequery.paginate,这是我正在做的工作的一部分,而不需要经历炼金术。