PyQT:使用来自SQLite查询的属性

时间:2013-09-20 22:20:21

标签: python sqlite pyqt

我对如何使用查询到本地SQLite数据库后返回的某些属性感到困惑。我可以使用其中一个属性填充qlistwidget,但是当用户点击listwidget项时我不知道如何获取其他属性。

以下代码是使用Eric创建的,它预先填充了一些信号和插槽

@pyqtSignature("QString")
def on_searchText_textEdited(self, p0):
    """
    Slot documentation goes here.
    """
    # TODO: not implemented yet
    self.resultsList.clear()
    self.searchItem = self.searchText.text()
    self.search()


@pyqtSignature("QListWidgetItem*")
def on_resultsList_itemClicked(self, item):
    """
    Slot documentation goes here.
    """
    # TODO: not implemented yet

    result = str(item.text())
    QMessageBox.about(self, "Clicked Item", "%s")%(result)


@pyqtSignature("")
def on_cancelButton_clicked(self):
    """
    Slot documentation goes here.
    """
    self.close()

def search(self):

    conn = sqlite3.connect("C:\\file.sqlite")
    cur = conn.cursor()
    sqlqry = "SELECT name, number, size FROM lookup WHERE name LIKE '%s' LIMIT 100;"%("%"+self.searchItem+"%")

    try:
        c = cur.execute(sqlqry)
        data = c.fetchall()            
        for i in data:                
            self.resultsList.addItem(i[0])

    except sqlite3.Error, e:

        QMessageBox.about(self, "Error message", "Error")

因此,当用户在行编辑中输入文本时,我的resultsList会被填充,但是当用户点击某个项目时,我会收到错误消息,其中包含有关NoneType和str的内容。

但是,我真正需要使用的是我的代码中其他地方的第二个和第三个属性。

那么如何通过itemClicked信号选择那些属性并创建两个新变量?

我希望这是有道理的,这是一个漫长的一天绕圈子

1 个答案:

答案 0 :(得分:0)

您只需要再次从数据库进行查询并使用新行。

@pyqtSignature("QListWidgetItem*")
def on_resultsList_itemClicked(self, item):
    """
    Slot documentation goes here.
    """

    result = str(item.text())
    QMessageBox.about(self, "Clicked Item", "%s")%(result)

    conn = sqlite3.connect("C:\\file.sqlite")
    cur = conn.cursor()
    sqlqry = "SELECT name, number, size FROM lookup WHERE name = '%s' LIMIT 1;"%(result)

    try:
        c = cur.execute(sqlqry)
        data = c.fetchone()            
        # Do something with data

    except sqlite3.Error, e:

        QMessageBox.about(self, "Error fetching %s"%name, "Error")

显然,这并不涉及您可能遇到的数据库问题,并假设name在数据库中是唯一的。