python - model.setTable() 在 pyqt5 中真正做了什么
问题描述
我对 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()
我的问题是,为什么我必须self.model.setTable()
在我的函数中包含该语句showall()
(否则它将不起作用)同时添加它会deleteinfo()
导致故障并且程序不会删除选定的行。如果我需要创建其他插槽来使用模型修改数据库怎么办?我需要self.model.setTable()
每次都使用吗?
解决方案
推荐阅读
- php - 在 PHP7 扩展中创建循环对象时发生内存泄漏
- python - 将声明为字符串的函数应用于 pandas 数据帧
- java - TreeSet 中不能删除重复的对象
- java - 带扩展名的证书
- git - 路径不存在的错误全局 gitconfig 文件
- c# - 在 LINQ 中将字符串与整数进行比较
- reactjs - 如何在 Windows 10 上使用“npm start”打开您想要的默认浏览器
- c# - 在 Selenium Chromedriver 之前加载表单
- keycloak - 如何从 Keycloak REST API 获取用户?
- c++ - UWP ListView 占用超过可用高度