首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QSqlRelationalTableModel只填充前256个记录

QSqlRelationalTableModel只填充前256个记录
EN

Stack Overflow用户
提问于 2017-02-16 22:38:07
回答 1查看 809关注 0票数 2

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

代码语言:javascript
复制
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 Model.select()之后的行: 256

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-17 00:52:36

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

代码语言:javascript
复制
while self.choicesModel.canFetchMore():
    self.choicesModel.fetchMore()

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42286016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档