我正在编写一个简单的学生成绩管理器,用于在PyQt上练习编程(我不想再使用可怕的Visual Basic)。但我在选择数据模型时遇到了一个大问题。
我先发现了QSqlTableModel
,它是一个自动更新的好模型。麻烦的是,我需要使用大量的SQL (JOIN
, WHERE
)从数据库中选择数据。QSqlTableModel
只有select()
和filter()
。
然后我找到QSqlQueryModel
,但它是只读的。所以我重写了它的setData()
方法。所以现在是读写。遗憾的是,QSqlQueryModel
的可用性不如QSqlTableModel
。
如你所见,如果我能使用SQL与QSqlTableModel
,我可以解决我所有的问题。
所以…?
QSqlTableModel
有setQuery
方法,您可以使用它来设置自定义查询,如:
model = QSqlTableModel()
query = QSqlQuery(your_query)
model.setQuery(query)
然而,Qt文档声明:
这个函数只是调用QSqlQueryModel::setQuery(query)。通常不应该在QSqlTableModel上调用它。相反,使用setTable()、setSort()、setFilter()等来设置查询。