Как можно контролировать количество данных, получаемых из SQLite, при их подгрузке, при использовании QSqlTableModel и QSqlQueryModel?

Есть пример для QSqlTableModel (для QSqlQueryModel код будет почти такой же):

from PyQt5.QtWidgets import QApplication, QTableView
from PyQt5.QtSql import QSqlDatabase, QSqlTableModel, QSqlQuery


db = QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('database.sqlite')
if not db.open():
    raise Exception(db.lastError().text())

TABLE = 'word2emoji'
query = QSqlQuery()
query.exec(f'SELECT COUNT(*) FROM {TABLE}')
query.next()
TABLE_ROW_COUNT = query.value(0)


def update_window_title():
    mw.setWindowTitle(f'{model.rowCount()} / {TABLE_ROW_COUNT}')


app = QApplication([])

model = QSqlTableModel()
model.rowsInserted.connect(update_window_title)
model.setTable(TABLE)
model.select()

mw = QTableView()
mw.setEditTriggers(QTableView.NoEditTriggers)
mw.setModel(model)
mw.resize(600, 480)
mw.show()

update_window_title()

app.exec()

При запуске из базы считываются 256 записей и, при прокрутке вниз, подгружаются новые порции

Хотелось бы контролировать количество записей, чтобы меньше отображаться, например по 100


Ответы (1 шт):

Автор решения: gil9red

Ответ – нельзя.

Это значение захаркодено (см. QSQL_PREFETCH в qsqlquerymodel.cpp) и поменять можно только пересобрав Qt, либо сделав свою модель и в ней переопределить логику в fetchMore

→ Ссылка