在Python wx中显示Sqlite数据库中的大型数据集

时间:2012-04-04 23:08:20

标签: python sqlite wxpython wxwidgets

我有一个存储在SQLite3数据库中的大型数据集(日志数据)。我使用Wx.listctrl创建了一个Python GUI,它显示查询中的数据。它适用于少量数据,但显然挂在较大的集合上。因此我想实现两件事之一:

-paging是listctrl中显示的前5000条记录,然后如果用户点击按钮,则会显示下一条5000 ..依此类推...... 要么 - 当用户向下滚动listctrl时,它会不断填充新数据..

我如何实施其中一个概念?在此先感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

按照the docs中的说明将其设为虚拟控件。列表视图将根据需要调用回调,以请求显示特定行。

答案 1 :(得分:0)

在不同的情景中,策略会有所不同。假设您只是使用wxPython进行演示,并且您有一个处理数据的单独模块/包。 wxPython控件只从数据抽象层获取数据。

场景I:将所有日志数据加载到内存中,并使用wx.listctrl或wx.listview显示行。

场景II:更新wx视图时从数据库中获取数据。

在场景I中,您只需设置一个变量来记住UI已读取的位置,或者如果您将日志作为列表加载,您甚至可以简单地使用列表滑动。通过向下/向上滚动自动更新视图可以在方案I中实现,因为已经加载了所有数据并且不再进行sqlite数据库连接。通过在场景II中向下/向上滚动来实现自动更新将是一个糟糕的选择,因为会有太多的数据库操作 - 想象你很快就向下滚动,期望得到第5000行?

在方案II中,您可以设置页面大小并使用LIMIT / OFFSET来获取所需的数据集。您为偏移号保留另一个变量。使用变量page_size和offset,您可以简单地获取数据并更新wx视图。此方案特别适合限制内存使用。我不知道你的日志有多大,但毕竟把它全部加载到内存中不是一个好主意,因为日志不断增长,你可能还需要同时加载其他相对较大的数据集。 / p>