问题描述:当我们不得以使用all()查询时,首先你要考虑的是性能问题,查询所有数据的做法会加重数据库负担同时服务器内存消耗量增加,如果数据库中的查询的表数据量巨大,那么这种方法会搞到系统崩溃,特别是我们的restful风格时避免不了有list_resource的接口,那么我们该怎么办呢?
思路:
首先是尽量添加条件过滤,或者使用limit() offset() 限制个数和区间的数据,当我们在做list_resource的接口的时候,我们尽量采用分页向前端展示
当我们在使用paginate方法的时候你是否还是担心它是否是有性能缺失?是否是先把数据全部查询出来再进行分页呢?告诉你并不是,下面为你列出源码,源码中它也是使用limit和offset的,所以你不用当心性能的问题
除此之外sqlalchemy 还有缓存的效果,在同一请求中多次查询相同的数据时,他只会查询一次,后面的将会是使用本地缓存的数据,
当然你觉得可能性能还不够好,那么你可以使用redis构建一层缓存(这里就不详细讨论了)
除此之外还有别的展示分页第三方库,不过只能将查询后的结果进行分页展示,下面列举出来
- paginate_sqlalchemy
官方文档地址https://pypi.org/project/paginate_sqlalchemy/ - paginate (没有找到官方文档地址,不过使用pip安装好,import paginate 即可使用)
只需要使用pip 进行安装即可,具体使用参照官方文档和源代码里面的举例用法即可