Зафиксировать существующий файл журнала в SQLite из ранее прерванного соединения с базой данных

Я создаю прототип сценария, который создает большие базы данных SQLite с ограничением по времени в четыре дня. Ограничение по времени было достигнуто до завершения сценария и выполнения команды connection.commit(). Сценарий удаляется, и соединение с базой данных прерывается, но журнал все еще находится в файловом каталоге, где создавалась база данных.

Я хотел бы зафиксировать существующий журнал, чтобы увидеть, находится ли текущий скрипт на правильном пути. Сначала я просто пытаюсь (используя модуль Python sqlite3 на iPython):

connection = sqlite3.connect('mydatabase')

connection.commit()

но я подозреваю, что мне нужно указать, что я хочу зафиксировать существующий журнал. Я попытался передать имя журнала в качестве аргумента в commit(), но commit () не принимает аргументы в модуле Python sqlite3.

В будущем я буду постепенно.commit ()

1 ответ

Решение

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

-journal файл фактически содержит старые данные, новые данные были записаны в фактический файл БД. Если вы действительно хотите увидеть изменения, внесенные вашей частичной транзакцией, вы можете попробовать удалить -journal файл (который не позволяет SQLite выполнить автоматический откат), а затем открыть базу данных, но состояние базы данных в этом случае является несовместимым, поэтому, вероятно, вы не сможете получить доступ ко всем данным.

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