Зафиксировать существующий файл журнала в 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 выполнить автоматический откат), а затем открыть базу данных, но состояние базы данных в этом случае является несовместимым, поэтому, вероятно, вы не сможете получить доступ ко всем данным.