Python 在分页中有效地迭代字典列表

Python 在分页中有效地迭代字典列表,python,flask,pagination,jinja2,Python,Flask,Pagination,Jinja2,Flask分页支持直接在DB对象上分页,而我需要高效地分页和呈现大量记录 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/<t

Flask分页支持直接在DB对象上分页,而我需要高效地分页和呈现大量记录

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()},
def修改(记录):
对于记录中的rec:
_rec=to_dict(rec,键=[“必需”、“键”、“仅限])
_rec.update({'cal\u vals':计算值(rec))
收益率
@app.route('/display/'方法=['POST']))
def渲染_记录(典型):
page=request.args.get('page',1,type=int)
records=db.objects.find(type=typ)#巨大的30K到40K条记录列表
记录=修改(记录)
#这不起作用,因为它会从db.objects.all()中取出计数
记录=记录。分页(第页,每页=200,错误)
返回渲染模板(
“show_records.html”,
响应={'records':记录,'context_vars':other_vals()},

实现这一点的其他方法是什么?

我不得不做很多假设,因为你的问题缺乏关于正在使用什么数据库和什么数据库库的很多细节。

数据库在处理40000条记录时应该没有问题。性能问题可能与对每条记录运行
modify()
函数,迫使数据库库“具体化”有关内存中的每一条记录都是一次完成的。只有这样,您才能运行分页,在花费大量时间修改所有结果后,您会丢弃99%的结果

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

records = db.objects.find(type=typ)
paginated_records = records.paginate(page, per_page=200, False)
modified_records = modify(paginated_records) # this only runs on 200 records

请更清楚地解释您的问题。您是否确实遇到了性能问题?40000条记录并不多,几乎可以由任何数据库轻松处理。请更新您的问题,说明您正在使用哪个数据库以及您正在使用哪个数据库库访问它。这些是重要的详细信息。记录看起来像什么,它们是如何处理的是有序的,
typ
的实际功能也会有所帮助。另外,为什么您认为将结果拆分为多个页面是一个好主意?修改功能是什么?@Soviut您能回答这个问题吗:。