2009-12-09 211 views
1

我正在使用PyQt將記錄插入MySQL數據庫。代碼基本上看起來像QSqlTableModel.insertRecord()很慢

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數據庫的任何想法?

感謝, 摹

回答

0

你s應該在循環之前開始使用,並且在循環之後提交,或者關閉MySQL的自動提交功能。 這會使您的性能提高50%或更多。