Python QSqlRelationalTableModel只填充前256条记录

Python QSqlRelationalTableModel只填充前256条记录,python,sqlite,pyqt,qsqlquery,qsqltablemodel,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") q

我使用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)
执行模型会产生以下输出:

数据库中的行数:831

模型后面的行。选择():256

初始选择似乎只填充前256条记录。这是sqlite3问题吗?如果是,我如何填充所有记录(db总共只有大约850条记录)。如果没有,我如何强制加载所有记录


结果是,在我更改代理筛选条件之前,使用proxymodel和代理视图最初不会显示所有记录-也就是说,我必须触发加载其余记录。

记录数在
QSqlQueryModel
类中硬编码为
\define qsqlu PREFETCH 255
。要覆盖它,您必须自己显式获取所有行:

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

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

非常感谢您的快速回复。