sqlite3.executemany python: изменить таблицу в одной транзакции? Ошибка блокировки

У меня есть приложение, где я использую функцию автокоммитирования sqlite3 везде, которая обычно работает нормально. Приложение включает в себя программу обновления базы данных.

По сути, это просто набор команд SQL для каждого обновления версии, которые должны вызываться в одной транзакции. Я реализовал это с помощью вызова.executemany(), который работал до сих пор. Сейчас я впервые хочу изменить описание таблицы с помощью этого метода (я сделал короткий пример, так как исходная таблица довольно большая):

Думать о

-- the Table in the current Version:
table: foo (foo_id INTEGER PRIMARY KEY, quantity INTEGER, 
            single_price REAL, all_price REAL)
-- where I want to end:
table: foo (foo_id INTEGER PRIMARY KEY, quantity INTEGER, 
            single_price REAL, total_price REAL)
(so renaming the 4th column)

Я не говорю об индексах здесь, проблема та же без:)

То, что я пытаюсь запустить в одиночном executemany ():

ALTER TABLE foo RENAME TO foo_PREv2;
CREATE TABLE foo (foo_id INTEGER PRIMARY KEY, quantity INTEGER, 
            single_price REAL, total_price REAL);
INSERT INTO foo (foo_id, quantity, 
            single_price, total_price)
SELECT foo_id, quantity, 
            single_price, all_price
FROM foo_PREv2;
DROP TABLE foo_PREv2; -- <<<--- here it fails with a database locked error

Даже если я перенесу DROP на второй вызов executemany (), это не сработает. Я должен перезапустить свое приложение, прежде чем я мог уронить.

Как я понял, executemany() обрабатывает материал BEGIN TRANSACTION ... COMMIT для меня. Что мне не хватает?

Заранее спасибо, король с уважением, Флориан.

0 ответов

Другие вопросы по тегам