解决QTableModel 只能加载少量数据(约256条)的问题

连续一周了,给孩子做的背单词程序不能录入需要识记的单词,之前是正常使用的,以为自己优化程序时误触了哪段脚本,导致单词不能正常录入。一遍一遍的跟踪调试,才发现,我使用QTableModel 写入数据库的模式,对数据量是有限制的。

原来的思路:

解决QTableModel 只能加载少量数据(约256条)的问题_第1张图片

问题出在了第一步

多次调试发现,QTableModel查出来的数据记录条数与单词表中的记录数不一致,单词表中是266条,但QTableModel中查出的记录,很多时候只有256条,有时也能达到262条。这种不稳定性,一度让我认为我的电脑硬件影响了查询结果。

因为QTableModel查出的记录条数(256条)和数据库中的记录条数(266条)不一致,所以语句self.tableModelWord.insertRow(266, QModelIndex()) 执行失败,导致数据不能正常插入。

解决方案

【错误方法】
在QTableModel所查出的256条记录之后,直接插入需要新增加的记录,然后提交。结果出现了严重的问题:
== 数据库中的表只有257条记录了!QTableModel没有查出的记录全丢了。==
幸好我有备份,否则真是惨了。

【正确方法】
百度了一个不错的方法,链接如下: https://blog.csdn.net/Heaven_Evil/article/details/78616984?spm=1001.2014.3001.5506

在QTableModel的select 之后,增加了一个判断canFetchMore(),即能获得到更多,就获得到更多:

        self.tableModelWord = QtSql.QSqlTableModel()
        self.tableModelWord.setTable('words')
        self.tableModelWord.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)  # 允许字段更改
        self.tableModelWord.select()  # 这一句很重要
        while self.tableModelWord.canFetchMore():
            self.tableModelWord.fetchMore()

问题终于解决!!

你可能感兴趣的:(python,pyqt)