Pluto
Сен. 1, 2013 19:12:25
Код, думается, приводить незачем.
В общем из 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 таблицу выбрал?
doza_and
Сен. 1, 2013 20:37:53
Pluto
немедленной записью на диск
По идее такое может быть если каждая вставка сопровождается commit
Попробуйте без прокладок напрямую к sqlite обращаться. Коммит сделайте в самом конце, 71 тысяча записей это немного.
http://docs.python.org/2/library/sqlite3.htmlПопробуйте
c.executemany('INSERT INTO stocks VALUES (?,?,?,?,?)', purchases)
Pluto
Сен. 2, 2013 18:55:08
self.con.transaction() и self.con.commit(), где con - объект соединение с БД sqlite cпасли отца русской демократии!
Добавление записей (запись их на диск) произошло за несколько секунд.
Ainur
Ноя. 9, 2017 12:19:30
Pluto
self.con.transaction() и self.con.commit(), где con - объект соединение с БД sqlite cпасли отца русской демократии!Добавление записей (запись их на диск) произошло за несколько секунд.
можете пожалуйста пример написать как это использовать?
Jony1990
Апрель 24, 2020 22:49:07
Вот не совсем понял, как он вообще этот код запустил ?