在分页中有效地遍历字典列表

时间:2019-03-31 07:31:37

标签: python flask pagination jinja2

Flask分页支持直接在数据库对象上进行分页,而我需要分页并有效地渲染大量记录。

def modify(records):
    for rec in records:
        _rec = to_dict(rec, keys=['required', 'keys', 'only']) 
        _rec.update({'cal_vals': calculated_Vals(rec))
        yield _rec   

@app.route('/display/<type>/' methods=['POST'])
def render_records(typ):
    page = request.args.get('page', 1, type=int)
    records = db.objects.find(type=typ) #Huge list 30K to 40K records
    records = modify(records) 
    # This wont work as it takes out the count from db.objects.all()  
    records = records.paginate(page, per_page=200, False)
    return render_template(
    'show_records.html',
     response ={'records': records, 'context_vars':other_vals()},

还有哪些其他方法可以实现这一目标?

1 个答案:

答案 0 :(得分:1)

我不得不做很多假设,因为您的问题缺少有关正在使用的数据库和数据库库的详细信息。

数据库应该可以轻松处理40,000条记录。您的性能问题可能与以下事实有关:您在每条记录上都运行tat函数,从而迫使数据库库一次“物化”内存中的每条记录。只有到那时,您才进行分页操作,此时您花了很多时间对所有结果进行了修改。

解决方案是仅对分页结果运行函数。

omtatatatarshta