2009-12-09 7 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. Любые идеи о том, как добавить кучу строк в базу данных MySQL с QtSql вместо необработанных команд и с разумной скоростью?

Спасибо, G

ответ

1

вещи, чтобы попробовать:

  • установить ваши EditStrategy в QSqlTableModel.OnManualSubmit
  • массовые строки вставки с insertRows

и посмотреть, если это помогает ...

0

вы с использовать начало до и совершить после цикла или отключить функцию автообновления MySQL. это даст вам обычно увеличение производительности на 50% и более.

Смежные вопросы