2

MySQL データベースに接続する PyQt5 アプリケーションがあります。同じモデルに接続された 2 つのビューを作成しました。ビューはデータベースからデータをうまく取り込みます。一方のフィールドに加えた変更は、他方にも反映されます。ただし、データベースは更新されません。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_()

私が抱えている 2 番目の問題は、1 つのセルのデータを変更すると、ビューで他のセルのデータを編集できないことです。これらは選択可能ですが、編集はできません。

4

1 に答える 1

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

これにより、編集が行われるとすぐにデータベースが更新され、ビューで複数の編集を行うこともできます。

于 2015-05-19T16:04:34.853 に答える