QSqlRelationalTableModel仅填充前256条记录

时间:2017-02-16 22:38:08

标签: python sqlite pyqt qsqlquery qsqltablemodel

我有使用PyQt5,sqlite3和python3.5.2的以下简单模型。

class choicesModel(QDialog):
    def __init__(self, parent=None):
        super(choicesModel, self).__init__()

        query = QSqlQuery()
        query.prepare("SELECT COUNT(*) FROM resident_choices")
        query.exec_()
        query.next()
        dbrows = query.value(0)
        print("rows in db: ", dbrows)

        self.choicesModel = QSqlRelationalTableModel(self)
        self.choicesModel.setEditStrategy(QSqlTableModel.OnManualSubmit)
        self.choicesModel.setTable("resident_choices")
        self.choicesModel.select()
        rows = self.choicesModel.rowCount()
        print("rows returned by model.select(): ", rows)

执行模型会产生以下输出:

  db:831中的

     model.select()之后的

行:256

初始选择似乎只填充前256个记录。这是一个sqlite3问题,如果是这样,我如何填充所有记录(数据库只有大约850条记录)。如果不能如何强制加载所有记录?

结果是使用代理模型和代理视图最初不显示所有记录,直到我更改代理过滤条件 - 也就是说,我必须触发其余记录的加载。

1 个答案:

答案 0 :(得分:1)

#define QSQL_PREFETCH 255类中的记录数被硬编码为QSqlQueryModel。要覆盖它,您必须自己显式获取所有行:

while self.choicesModel.canFetchMore():
    self.choicesModel.fetchMore()

每次更新模型时,您可能需要运行这样的代码,因此最好创建自己的子类并重新实现fetchMore