Форум сайта python.su
Код, думается, приводить незачем.
В общем из dbf-ки посредством модуля pyodbc и команды fetchall выбираются все строки,
затем в цикле каждая строчка из pyodbc.cursor помещается в питоновскую переменную,
из неё формируется строчка для sql-запроса на вставку Insert into sqlite_table (FAM, IM) values (dbfFAM, dbfIM)
И затем каждая такая sql-строчка выполняется посредством QtSql.QSqlQuery
В итоге, каждая вставка записи сопровождается немедленной записью на диск, и dbf-файлик из 71 тысячи записей уже больше десяти минут переносится в sqlite базу.
Мне думается, что надо как-то заставить программу выполнять запись на диск не сразу, а, допустим, порциями по 100 строк. А по началу они пусть в оперативной памяти добавляются. Набралось 100 записей, добавились они все на диск.
Как так можно сделать?
А может я вообще неверный способ для переноса dbf в sqlite таблицу выбрал?
Офлайн
PlutoПо идее такое может быть если каждая вставка сопровождается commit
немедленной записью на диск
c.executemany('INSERT INTO stocks VALUES (?,?,?,?,?)', purchases)
Отредактировано doza_and (Сен. 1, 2013 20:39:29)
Офлайн
self.con.transaction() и self.con.commit(), где con - объект соединение с БД sqlite cпасли отца русской демократии!
Добавление записей (запись их на диск) произошло за несколько секунд.
Офлайн
Plutoможете пожалуйста пример написать как это использовать?
self.con.transaction() и self.con.commit(), где con - объект соединение с БД sqlite cпасли отца русской демократии!Добавление записей (запись их на диск) произошло за несколько секунд.
Офлайн
Вот не совсем понял, как он вообще этот код запустил ?
Офлайн