我有以下使用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 Model.select()之后的行: 256
似乎初始选择只填充前256条记录。这是一个sqlite3问题吗?如果是的话,我如何填充所有记录(数据库只有大约850个记录总数)。如果不是,如何强制加载所有记录?
结果是,使用proxymodel和proxy视图最初不会显示所有记录,直到我更改代理筛选条件-也就是说,我必须触发其余记录的加载。
发布于 2017-02-17 00:52:36
记录数在#define QSQL_PREFETCH 255类中被硬编码为QSqlQueryModel。要重写它,您必须自己显式地获取所有行:
while self.choicesModel.canFetchMore():
self.choicesModel.fetchMore()每次更新模型时,您可能都需要运行这样的代码,所以最好创建自己的子类并重新实现fetchMore。
https://stackoverflow.com/questions/42286016
复制相似问题