2012-04-04 129 views
1

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

-paging是第一个5000条记录显示在listctrl然后如果用户单击一个按钮下一个5000显示..等等等等.. 或 - 作为用户向下滚动的listctrl它不断地用新的数据填充..这些概念

我将如何实现呢?先谢谢您的帮助!

回答

1

使其成为虚拟控件,如the docs中所述。该列表视图将根据需要调用回调以请求显示的特定行。

0

在不同的情况下,策略会有所不同。假设你只是使用wxPython作为演示目的,并且你有一个单独的模块/包来处理数据。 wxPython控件仅从数据抽象层获取数据。

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

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

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

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

+0

我正在寻找一个导师,我会付出教给我一些这些东西(通过webex)..它只是让我长期得到这个东西我自己做,我需要一些方向.. obv for pay 。你有兴趣吗? – user1314011 2012-04-05 15:43:42

+0

很抱歉,我太忙了,不能成为你的导师。我相信你会在你身边找到一个擅长wxPython的人。感谢您的询问;-) – user866903 2012-04-06 03:03:37