2017-02-16 33 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) 

Выполнение модели производит следующий вывод:

строк в БД: 831

строки после model.select(): 256

Представляется, что начальная select только заполняет первые 256 записей. Является ли это проблемой sqlite3, и если да, то как я заполняю все записи (у db всего около 850 записей). Если нет, как я могу заставить все записи загружаться?

Результат заключается в том, что с использованием проксимоделя и прокси-представления сначала не отображаются все записи, пока я не изменю условие фильтра прокси-сервера, то есть я должен запустить загрузку остальной части записей.

ответ

1

Число записей жестко закодировано как #define QSQL_PREFETCH 255 в классе QSqlQueryModel. Чтобы изменить его, вам придется явно извлечь все строки, сами:

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

Вы, вероятно, нужно запустить код, как это каждый раз, когда модель обновляется, так что может быть лучше, чтобы создать свой собственный суб-класс и переопределить fetchMore.

+0

Большое спасибо за ваш быстрый ответ. – GM65

+0

Исправлена ​​ошибка. – GM65