Python PyQt:最有效的删除sql查询

Python PyQt:最有效的删除sql查询,python,sql,qt,pyqt4,Python,Sql,Qt,Pyqt4,我正在使用pyqt4、qt设计器和postgresql数据库。我已经设法使我的GUI的一部分,插入新的数据到我的数据库,但现在我想尝试我的GUI删除部分的其他东西。由于我对python/pyqt的研究已经有一个星期了,所以我将尽可能简单地解释我想要的东西。首先:这是我用于添加数据的部分代码: ... class database_GUI(QtGui.QWidget, Ui_Main_GUI_Widget): def __init__(self): QtG

我正在使用pyqt4、qt设计器和postgresql数据库。我已经设法使我的GUI的一部分,插入新的数据到我的数据库,但现在我想尝试我的GUI删除部分的其他东西。由于我对python/pyqt的研究已经有一个星期了,所以我将尽可能简单地解释我想要的东西。首先:这是我用于添加数据的部分代码:

...
class database_GUI(QtGui.QWidget, Ui_Main_GUI_Widget):
       def __init__(self):
              QtGui.QWidget.__init__(self)
              self.setupUi(self)
              self.Add_button.clicked.connect(self.open_sub_ui)

       def open_sub_ui(self):
              if self.Add_comboBox.currentText() == "kirurg":
                     global kirurg
                     kirurg = kirurg_GUI()
                     kirurg.show()
...
class kirurg_GUI(QtGui.QWidget, Ui_kirurg_Widget):
       def __init__(self):
              QtGui.QWidget.__init__(self)
              self.setupUi(self)
              self.kirurg_Add_button.clicked.connect(self.insert_kirurg)

       def insert_kirurg(self):
              oib_kir = self.kirurg_oib_kir_lineEdit.text()
              if not oib_kir:
                     QtGui.QMessageBox.critical(self, 'Query error', 'oib_kir must not be empty')

              else: 
                     query = QSqlQuery()
                     status = query.exec("INSERT INTO kirurg (oib_kir, prezime, ime, adresa, broj_telefona)"
                                         "VALUES ('%s', '%s', '%s', '%s', '%s')" % (''.join(self.kirurg_oib_kir_lineEdit.text()),
                                                                                    ''.join(self.kirurg_prezime_lineEdit.text()),
                                                                                    ''.join(self.kirurg_ime_lineEdit.text()),
                                                                                    ''.join(self.kirurg_adresa_lineEdit.text()),
                                                                                    ''.join(self.kirurg_broj_telefona_lineEdit.text())))
                     if status is not True:
                            errorText = query.lastError().text()
                            QtGui.QMessageBox.critical(self, 'Query error', errorText)
所以,基本上,新的GUI将为每个其他组合框选项打开。如果用户选择comboBox选项1并单击Add,它将打开GUI,用于向表1添加数据;如果用户选择comboBox选项2并单击Add,它将打开GUI,用于向表2添加数据,依此类推。 但是,我希望我的Delete GUI更加灵活,所以我想知道是否有可能实现如下功能:

query.exec("DELETE FROM ('%s') WHERE ('%s) = ('%s'))

这些“%s”应该是字符串,我的程序将从lineEdit.text读取这些字符串。所以基本上,程序将读取用户在lineEdit中输入的数据,并根据这些数据知道要删除的数据行和表中的数据。我希望你能明白我的观点和问题。如果不可能,我想我会为每个表制作另外12个粘贴的GUI,但我希望有更好的解决方案。

您最好不要像那样构建sql查询,因为。更好的方法是将数据库逻辑封装到一个独立的类中,并在这些类上提供delete方法,这样可以安全地构建sql查询。另外,使用比内置pyQt更复杂的db层可能是个好主意。我知道这不是最好的方法,但这是为了我的大学项目,所以我不希望在第一次尝试时做一些哇,甚至完全正确的事情。我还是第一次向我的教授展示这一点,所以可能会有一些变化,但我只是希望有比我在GUI的添加部分使用的更好的方法。您使用QSqlQuery,所以请查看文档,有几个函数addBindValue,bindValue。。。这比你想做的更安全,更容易使用。