我创建了一个应用程序,我必须在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 .....请帮助我,我被卡住了
答案 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模型,代码就是微不足道的。
(如果你选择的话,这也可以让你轻松地按列进行排序;将身份与订单和索引分开,你可以随心所欲地改变东西。)