2017-02-16 82 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