2017-02-16 101 views
1

我有以下使用PyQt5,sqlite3和python3.5.2的简单模型。QSqlRelationalTableModel只填充前256条记录

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) 

执行模型产生以下输出:

行中分贝:model.select后831个

行():256

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

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

回答

1

记录数在QSqlQueryModel类中被硬编码为#define QSQL_PREFETCH 255。要覆盖它,你就必须自己明确获取所有行:

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

你可能会需要像这样运行代码每次模型更新时间,所以它可能是更好的创建自己的子类并重新实现fetchMore

+0

非常感谢您的快速回复。 – GM65

+0

解决了这个问题。 – GM65