从sqlite数据库中显示的qtableWidget中删除一行

时间:2014-01-20 09:06:16

标签: python sqlite pyqt

我创建了一个应用程序,我必须在tableWidget中显示数据库中的数据,并且我成功地将其显示在表中。问题是我没有得到如何从QTableWidget中的选定行获取ID值,以便从sql db中删除该行。请帮帮我。这就是我的尝试:

def removebutton_Clicked(self):
db_id = self.get_currentId()
self.queryCurs.execute("DELETE FROM PATIENT WHERE ID = %d" % (db_id))
self.createDb.commit()

def get_currentId(self):
if self.patientTable.currentIndex():
    index = self.patientTable.currentIndex().row()
    print index
    db_id = self.patientTable.index.value("ID")
    return db_id

我没有得到如何得到表格行的当前ID .....请帮助我,我被卡住了

2 个答案:

答案 0 :(得分:0)

首先确保返回的db_id是有效值。

self.queryCurs.execute("DELETE * FROM PATIENT WHERE ID LIKE ?",[db_id])

将DELETE *(整行)FROM PATIENT(表)WHERE ID(是)LIKE db_id

例如,我的代码中有多个条件:

cur.execute("SELECT * FROM Elements WHERE Name LIKE ? OR Type LIKE ? OR Id LIKE ?", [searchWord, searchWord, searchWord])

修改 由于您不在self.patientTable中使用模型,因此需要使用您需要的“ID”填充该表的任何列(可以隐藏)。 这样你就可以这样:

db_id = (self.patientTable.item(self.patientTable.currentIndex().row(), col).text()).toUtf8()

其中col是您存储ID值

的列的列号

答案 1 :(得分:0)

您是否假设GUI中的行号与数据库中的ID相对应?不要那样做。只要行保留在数据库表中,数据库行ID应保持相同,而GUI表显示则更为短暂。这样做的副作用是,在几次插入和删除之后,数据库表ID可能变得不连续,并且不会从0或1开始。

GUI数据模型需要让显示数据的每一行都记住数据库表行的ID - 即使它没有向用户显示(除了可能用于调试) - 这样当你删除该行,您只需要让模型告诉您该ID,然后按该ID删除。只要你正确地获得GUI模型,代码就是微不足道的

(如果你选择的话,这也可以让你轻松地按列进行排序;将身份与订单和索引分开,你可以随心所欲地改变东西。)