我有一个PyQt5应用程序连接到MySQL数据库。我将两个视图连接到同一个模型。视图从数据库中提取数据就好了。我对其中任何一个字段所做的任何更改都会反映在另一个字段中。但它不会更新数据库。我试着让它闲置15分钟,但没有更新数据库。
这是我的代码:
from PyQt5.QtSql import QSqlDatabase, QSqlQuery, QSqlTableModel
from PyQt5.QtWidgets import QTableView, QApplication
import sys
app = QApplication(sys.argv)
db = QSqlDatabase.addDatabase("QMYSQL")
db.setHostName("localhost")
db.setDatabaseName("usrdb")
db.setUserName("usr")
db.setPassword("passwrd")
db.open()
testModel = QSqlTableModel()
qry = QSqlQuery("select * from test", db)
testModel.setQuery(qry)
testModel.setEditStrategy(QSqlTableModel.OnFieldChange)
testView = QTableView()
testtView.setModel(testModel)
testView2 = QTableView()
testView2.setModel(testModel)
testView.show()
testView2.show()
app.exec_()
我遇到的第二个问题是,一旦我更改了一个单元格中的数据,该视图就不允许我编辑任何其他单元格中的数据。它们是可选择的,但不可编辑。
答案 0 :(得分:2)
解决了我的问题。 pyqt文档建议不要使用setQuery。
您通常不应该在QSqlTableModel上调用它(setQuery)。相反,使用 setTable(),setSort(),setFilter()等,用于设置查询。
更新的代码:
from PyQt5.QtSql import QSqlDatabase, QSqlQuery, QSqlTableModel
from PyQt5.QtWidgets import QTableView, QApplication
import sys
app = QApplication(sys.argv)
db = QSqlDatabase.addDatabase("QMYSQL")
db.setHostName("localhost")
db.setDatabaseName("usrdb")
db.setUserName("usr")
db.setPassword("passwrd")
db.open()
testModel = QSqlTableModel()
testModel.setTable("test")
testModel.setEditStrategy(QSqlTableModel.OnFieldChange)
testModel.select()
testView = QTableView()
testtView.setModel(testModel)
app.exec_()
这会在编辑后立即更新数据库,还允许我对视图进行多次编辑。