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()},
还有哪些其他方法可以实现这一目标?
答案 0 :(得分:1)
我不得不做很多假设,因为您的问题缺少有关正在使用的数据库和数据库库的详细信息。
数据库应该可以轻松处理40,000条记录。您的性能问题可能与以下事实有关:您在每条记录上都运行tat
函数,从而迫使数据库库一次“物化”内存中的每条记录。只有到那时,您才进行分页操作,此时您花了很多时间对所有结果进行了修改。
解决方案是仅对分页结果运行函数。
omtatatatarshta