【发布时间】:2012-03-22 09:05:17
【问题描述】:
我想在基于模型/视图的PyQt 应用程序中使用与以下SQL 语句等效的PyQt:
SELECT * FROM table ORDER BY foo, bar
如何按QSqlTableModel 中的多列排序,尤其是因为setSort() 接受单个column 参数?
【问题讨论】:
标签: python sql sorting pyqt qsqltablemodel
我想在基于模型/视图的PyQt 应用程序中使用与以下SQL 语句等效的PyQt:
SELECT * FROM table ORDER BY foo, bar
如何按QSqlTableModel 中的多列排序,尤其是因为setSort() 接受单个column 参数?
【问题讨论】:
标签: python sql sorting pyqt qsqltablemodel
似乎有一个替代setSort(),称为setFilter()。
来自 PyQt 文档:
QSqlTableModel.setFilter(self,QString过滤器)
将当前过滤器设置为过滤器。
过滤器是一个没有关键字 WHERE 的 SQL WHERE 子句(对于 例如,name='Josephine')。
所以,这解决了问题:
fooModel.setFilter("never_zero != 0 ORDER BY foo, bar")
never_zero 字段是(惊喜,惊喜)从不为零。
【讨论】:
QSqlTableModel 相当有限。 QSqlQueryModel 应该是选项。如果您需要写访问权限,您可以将其子类化以提供适当的方法。或者,如果您的数据集不是那么大,您可以考虑在两者之间放置一个自定义 QSortFilterProxyModel。它需要自定义,因为原始 QSortFilterProxyModel 也需要单列进行排序,但它很容易继承并提供您自己的排序实现。