QSqlTableModel.insertRecord()非常慢

时间:2009-12-09 00:13:19

标签: qt insert performance pyqt record

我正在使用PyQt将记录插入MySQL数据库。代码基本上看起来像

self.table = QSqlTableModel()
self.table.setTable('mytable')
while True:
  rec = self.table.record()
  values = getValueDictionary()
  for k,v in values.items():
    rec.setValue(k,QVariant(v))
  self.table.insertRecord(-1,rec)

该表目前有大约50,000行。 我已经计时了每一行,发现insertRecord函数需要大约5秒才能执行,这是不可接受的慢。其他一切都很快。

为了比较,我还制作了一个使用

的代码版本
QSqlQuery.prepare("INSERT INTO mytable (f1,f2,...) VALUES (:f1, :f2,...)")
query.bindValue(":f1",blah)
query.exec_()

在这种情况下,整个过程只需要约20毫秒,因此据我所知,延迟不在数据库连接中。

我更喜欢使用QtSql而不是笨拙的MySQL命令。关于如何使用QtSql而不是原始命令以合理的速度将一堆行添加到MySQL数据库的任何想法?

谢谢, ģ

2 个答案:

答案 0 :(得分:1)

要尝试的事情:

看看它是否有帮助......

答案 1 :(得分:1)

你应该在循环之前使用begin并在循环之后提交,或者从MySQL关闭自动提交功能。 这通常会使您的性能提升50%或更多..