连续一周了,给孩子做的背单词程序不能录入需要识记的单词,之前是正常使用的,以为自己优化程序时误触了哪段脚本,导致单词不能正常录入。一遍一遍的跟踪调试,才发现,我使用QTableModel 写入数据库的模式,对数据量是有限制的。
多次调试发现,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()
问题终于解决!!