Python и sqlite3 - добавление тысяч строк - PullRequest
6 голосов
/ 18 января 2011

У меня есть файл .sql, содержащий тысячи отдельных операторов вставки. Требуется вечность, чтобы сделать их всех. Я пытаюсь найти способ сделать это более эффективно. В python библиотека sqlite3 не может делать такие вещи, как «.read» или «.import», но исполняемый скрипт слишком медленный для такого количества вставок.

Я установил оболочку sqlite3.exe в надежде использовать «.read» или «.import», но не могу понять, как ее использовать. Запуск его через django в eclipse не работает, так как он ожидает, что база данных находится в корне моего диска C, что выглядит глупо. Запуск через командную строку не работает, потому что он не может найти файл моей базы данных (если я не делаю что-то не так)

Любые советы?

Спасибо!

Ответы [ 4 ]

11 голосов
/ 18 января 2011

Вы используете транзакции? SQLite создает транзакцию для каждого оператора вставки по умолчанию , что замедляет процесс.

По умолчанию открывается модуль sqlite3 транзакции неявно перед данными Заявление о языке модификации (DML) (т. е. ВСТАВИТЬ / ОБНОВИТЬ / УДАЛИТЬ / ЗАМЕНИТЬ)

Если вы вручную создадите одну транзакцию в начале и зафиксируете ее в конце, это значительно ускорит процесс.

3 голосов
/ 18 января 2011

Вы пытались запустить вставки внутри одной транзакции?Если нет, то каждая вставка обрабатывается как транзакция и ... хорошо, вы можете прочитать FAQ по SQLite для этого здесь

2 голосов
/ 09 декабря 2012

Также попробуйте VACUUM и ANALYZE в файле базы данных. Помогла похожая проблема моей.

1 голос
/ 18 января 2011

Использовать параметризованный запрос

и

Используйте транзакцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...