model.setTable()在pyqt5中真正做什么

2024-09-30 04:29:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我对setTable()方法对QSqlTableModel的作用感到困惑。我知道它会告诉模型需要处理哪个数据库表,但我在这里面临两个问题,这让我感到困惑

假设我已经创建了一个foem,它接受用户输入并创建一个数据库并在其中添加行,还有一个用于删除行并显示整个数据库的选项

from PyQt5 import QtCore, QtGui, QtWidgets, QtSql
from form import Ui_MainWindow
import sys


class Example(QtWidgets.QMainWindow):

    def __init__(self):
        super().__init__()

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.showInfo()

        self.ui.pushButton_AddPatient.clicked.connect(self.create)

        self.ui.pushButton_DeletePatient.clicked.connect(self.deleteinfo)
        self.ui.pushButton.clicked.connect(lambda : self.search(self.ui.lineEdit.text()))

        self.ui.pushButton_ShowPAtient.clicked.connect(self.showall)
        self.show()



    def create(self):
        db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
        db.setDatabaseName('patients.db')
        db.open()
        query = QtSql.QSqlQuery()
        query.exec_(

           # SQL QUERY TO CREATE THE TABLE
        )
        query.exec_(

        #SQL QUERY TO INSERT SOME ROWS TO THE DATABASE
        )

        self.model.select()


   def showall(self):
        self.model.setTable("patients")

        self.model.select()


    def showInfo(self):
        db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
        db.setDatabaseName('patients.db')
        db.open()
        self.model = QtSql.QSqlTableModel()

        self.model.setTable('patients')

        self.ui.tableView.setModel(self.model)
        self.ui.tableView.setSelectionMode(QtWidgets.QTableView.SingleSelection)
        self.ui.tableView.setSelectionBehavior(QtWidgets.QTableView.SelectRows)


        self.model.select()

    def deleteinfo(self):

        #self.model.setTable("patients")
        current = self.ui.tableView.selectedIndexes()

        for item in current:
              self.model.removeRow(item.row())
        self.model.select()

    def search(self, item):
        self.model.setFilter("name LIKE '%{}%'".format(item))
        self.model.select()

我的问题是,为什么我必须在我的showall()函数中包含self.model.setTable()语句(否则它将不起作用),而将它添加到deleteinfo()会导致故障,并且程序不会删除所选行。 如果我需要创建其他插槽来使用该模型修改数据库,该怎么办?我是否每次都需要使用self.model.setTable()


Tags: self数据库uidbmodeldefconnectselect

热门问题