目录
一、Flask-SQLAlchemy - 直接获取分页后的数据
1-0 基于 flsk-sqlalchemy 的批量数据插入 - add_all(list)
3-1 简单指定当前页page和显示页数per_page获取分页数据
一、Flask-SQLAlchemy - 直接获取分页后的数据
paginate(page=None, per_page=None, error_out=True, max_per_page=None)
Returns per_page items from page page.
If page or per_page are None, they will be retrieved from the request query. If max_per_page is specified, per_page will be limited to that value. If there is no request or they aren’t in the query, they default to 1 and 20 respectively.
如果page或per_page为None,则将从请求查询中检索它们。如果指定了max_per_page,则per_page将限制为该值。如果没有请求或它们不在查询中,则它们分别默认为1和20。
- When error_out is True (default), the following rules will cause a 404 response(当error_out为True(默认值)时,以下规则将导致404响应):
- No items are found and page is not 1. - 找不到任何项目且页面不是1.
- page is less than 1, or per_page is negative. - page小于1,或per_page为负数。
- page or per_page are not ints. - page或per_page不是整数。
- When error_out is False, page and per_page default to 1 and 20 respectively.(当error_out为False时,page和per_page分别默认为1和20。)
Returns a Pagination object. - 返回 Pagination 对象
@app.route('/') @login_required def index(): page=request.args.get('page',1,type=int) pagination=User.query.order_by(User.createTime.desc()).paginate(page,per_page=12,error_out=False) users=pagination.items return render_template('index.html', name=current_user.username,users=users,pagination=pagination)1-0 基于 flsk-sqlalchemy 的批量数据插入 - add_all(list)
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:Apassword@localhost:3306/test' app.config['SQLALCHEMY_DATABASE_URI'] = SQLALCHEMY_DATABASE_URI db = SQLAlchemy(app) class Test(db.Model): __tablename__ = 'test' id = db.Column(db.INTEGER, primary_key=True) name = db.Column(db.String(255), nullable=False) def __repr__(self): return '<Test %r>' % self.name def quick_update(): li = [] for i in range(100): li.append(Test(name='test_%s' % i)) db.session.add_all(li) db.session.commit() if __name__ == '__main__': quick_update()执行函数出现警告,未影响数据插入(未解决)
1-1 Pagination对象的常用属性
- items当前页面中的所有记录(比如当前页上有5条记录,items就是以列表形式组织这5个记录)
- query当前页的query对象(通过query对象调用paginate方法获得的Pagination对象)
- page当前页码(比如当前页是第5页,返回5)
- per_page每页显示的记录条数量,若不指定,默认显示20个记录
- prev_num上一页页码
- next_num下一页页码
- has_next是否有下一页 True/False
- has_prev是否有上一页 True/False
- pages查询得到的总页数
- total总的记录条数
- error_ out
- 当其设为 True 时(默认值),如果请求的页数超出了范围,则会返回 404 错误;
- 如果 设为 False,页数超出范围时会返回一个空列表。
def select(): pagination = Test.query.paginate(page=1, per_page=10, error_out=True) print('items 当前页面的所有记录:',pagination.items) print('page 当前页码:',pagination.page) print('per_page 每页显示记录条数:',pagination.per_page) print('has_prev 是否有上一页:',pagination.has_prev) print('prev_num 上一页页码:',pagination.prev_num) print('has_next 是否有下一页:',pagination.has_next) print('next_num 下一页页码:',pagination.next_num) print('pages 查询得到的总页数:',pagination.pages) print('total 总记录条数:',pagination.total) if __name__ == '__main__': select()
1-2 Pagination对象的常用方法
- prev()上一页的分页对象Pagination
- next()下一页的分页对象Pagination
- iter_pages(left_edge=2,left_current=2,right_current=5,right_edge=2)
- iter_pages 用来获得针对当前页的应显示的分页页码列表。
- 假设当前共有100页,当前页为50页,按照默认的参数设置调用iter_pages获得的列表为:[1,2,None,48,49,50,51,52,53,54,55,None,99,100]
二、flask-paginate - 对原始数据进行分页
三、Flask-Redis 的数据分页
3-1 简单指定当前页page和显示页数per_page获取分页数据
# 视图函数 from flask import Blueprint, request, jsonify from flask_restful import Resource from extensions import redis_store0 from . import Api redis_page_blueprint = Blueprint('redis_page', __name__) redis_page_api = Api(redis_page_blueprint) class RedisPage(Resource): def post(self): # page 当前页码(比如当前页是第5页,返回5) page = int(request.form['page']) # per_page 每页显示的记录条数量 per_page = int(request.form['per_page']) print(page, per_page) # zrangebylex(name, min, max, start=None, num=None) 从有序集合中获取实时数据列表,根据index排序获取 # redis_keys = redis_store0.zrangebylex('test', "-", "+", start=(page - 1) * per_page + 1, num=per_page) # zrangebyscore(self, name, min, max, start=None, num=None, withscores=False, score_cast_func=float) 根据score排序 count = redis_store0.zcard('test') redis_keys = redis_store0.zrangebyscore('test', 0, count, start=(page - 1) * per_page + 1, num=per_page) print(redis_keys) res_dic = {k: redis_store0.zscore('test', k) for k in redis_keys} return jsonify({'result': res_dic}) redis_page_api.add_resource(RedisPage, '/redis_page') # http://127.0.0.1:5000/redis/redis_page
版权声明:本文为qq_33961117原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。




