PyQt5 QSqlTableModel未更新对数据库的更改

2024-10-01 09:41:52 发布

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

我有一个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_()

我遇到的第二个问题是,一旦我更改了一个单元格中的数据,视图就不允许我编辑任何其他单元格中的数据。它们是可选的,但不可编辑。在


Tags: 数据fromimport视图数据库appdbsys
1条回答
网友
1楼 · 发布于 2024-10-01 09:41:52

解决了我的两个问题。pyqt文档建议不要使用setQuery。在

You should normally not call it(setQuery) on a QSqlTableModel. Instead, use setTable(), setSort(), setFilter(), etc., to set up the query.

更新代码:

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_()

这将在编辑完成后立即更新数据库,还允许我对视图进行多次编辑。在

相关问题 更多 >