使用Python和wx.ListCtrl加速SQLite select

时间:2015-07-14 04:25:45

标签: python sqlite select wxpython wxwidgets

我在Kubuntu Python 2.7.5+上使用13.10 wx 2.8.12.1

我没有大数据库(大约3150行)我只有一个员工表(名字,姓氏,地址,电话,电子邮件)。在我的应用程序中,我将它们存储在SQLite数据库中,并使用wx.ListCtrl向用户显示行。

但是,将此类数据库加载到wx.ListCtrl需要很长时间(我认为超过10秒)。 问题是:是否有可能提高选择速度?

首先,在我的Python代码中,我创建了一个表:

def createEmployeesTable(self):
        connection = sqlite.connect(self.dbname)
        try:
            with connection:
                cursor = connection.cursor()
                sql = '''\
                    CREATE TABLE IF NOT EXISTS Employees (
                        ID INTEGER PRIMARY KEY NOT NULL,
                        FIRSTNAME TEXT,
                        LASTNAME TEXT,
                        EMAIL TEXT,
                        ADDRESS TEXT,
                        PHONE TEXT)
                '''
                cursor.execute(sql)
        finally:
            connection.close()

然后,我插入一些员工的数据,最后选择在弹出窗口中显示数据,其中包含wx.ListCtrl

def getAllEmployees(self):
        employees = []
        connection = sqlite.connect(self.dbname)
        try:
            with connection:
                cursor = connection.cursor()
                sql = "SELECT firstname, lastname, email, phone, address FROM Employees"
                cursor.execute(sql)
                for (firstname, lastname, email, phone, address, ) in cursor:
                    employees.append(Employee(firstname, lastname, email, phone, address))
        finally:
            connection.close()
        return employees

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您可能需要使用wx.ListCtrl的虚拟版本。它在documentation中提到如下:

与列表控件的其他模式完全不同的报表视图的特殊情况是虚拟控件,其中项目数据(包括文本,图像和属性)由主程序管理并且由仅在需要时控制自身,允许控制数百万个项目,而不会消耗太多内存。

似乎没有太多的例子,但我确实找到了以下内容:

在wxPython演示中还有一个完整的示例,其中包含近1,000,000个项目,因此您一定要检查它。