在Flask中将大量查询结果获取到模板的最佳方法

时间:2018-11-15 05:04:21

标签: python sql json flask chunking

我试图弄清楚如何传递一个大型查询,该查询已转换为一个由大约500000多个条目的列表构成的JSON字符串,并传递至模板。我目前的操作方式适用于较小的对象:

return render_template('/dataprocessing.html', data=json.dumps(result))

data = json.dumps(result)的地方是我将大JSON字符串传递给模板的方式。但是,存储在客户端中的此字符串的大小大大减慢了我的应用程序的速度。我也知道,还有另一种方法通过cookie传递它,但这比这种方法更糟糕,不适用于较大的尺寸。

我的应用程序所做的是它通过SQL查询从数据库中呈现大量数据。我想通过逐行浏览数据并创建表示这些行的DOM元素来可视化模板中的数据。

我一直在寻找时间,并尝试实施针对该问题的解决方案,但收效甚微,因此,如果有人能指出正确的方向,我将不胜感激。

我想到的一种解决方案是对数据进行分块,然后一次从视图向模板发送一个块。然后,当我们移至模板内部当前块的最后一行时,我将发送下一个块。我会通过AJAX调用吗? (我是Web开发人员的新手。)

1 个答案:

答案 0 :(得分:0)

这是要传递到浏览器的大量数据,这会阻塞任何用户的计算机。例如,假设Google显示的结果是100,000,而不是10或20,那么搜索结果的呈现速度将非常慢。如果您想可视化数据,我想您可能希望在发送模板之前对其进行预聚合,以便“图形就绪”。让我们举一个简单的例子:

id,name,publisher
1,war and peace,penguin
2,romeo and juliet,harper
3,the trial, penguin

您可能不想将其传递到预先聚合的模板中,例如:

[
  {
    "publisher": "penguin",
    "count": 2,
    "items": ["war and peace", "the trial"]
  },
  {
    "publisher": "haper",
    "count": 1,
    "items": ["romeo and juliet"]
  }
]

通过这种方式,您可以在将数据发送到模板之前 进行处理,并且在上面的示例中,可以执行条形图之类的操作,并且onHover可以显示其拥有的书本(或者也许是前5名-如果有大量数据,大多数数据将在webview中被截断)。