Резервное копирование базы данных sqlite3 в Python 2.5 - PullRequest
2 голосов
/ 16 июля 2010

Я работаю над проектом, который должен поддерживать Python 2.5 и 2.6, и использует sqlite3.Я хотел бы иметь возможность сделать резервную копию базы данных из программы.

Кажется, что есть два способа сделать это: создать новую базу данных в sqlite3 и переместить все данные, или просто скопировать файл базы данных на диск.

Мой инстинкт (и часть того, что я хотел бы проверить здесь), это то, что безопаснее копировать данные в системе, так как это гарантирует, что я не попытаюсь скопировать файл в нестабильном состоянии.Хотя я мог бы защитить от многих основных ошибок, защита от всех возможных ошибок при копировании файла была бы сложной задачей.

Однако, поскольку я поддерживаю Python 2.5, у меня нет iterdump () В моем распоряжении создание резервной копии в программе заняло бы много времени (делая соблазнительную копию файла).

Каковы плюсы и минусы прямого копирования файла?Есть ли простой способ в 2.5 скопировать всю базу данных способом, подобным методу iterdump () 2.6? *

Ответы [ 2 ]

3 голосов
/ 11 марта 2011

Копирование файла SQLite3, который используется в данный момент, может работать в 99% случаев, , но это небезопасно , как я понял сложным путем. Я имею в виду, что на самом деле вы можете скопировать сам файл БД, но вы должны быть абсолютно уверены, что все файловые дескрипторы файла БД закрыты, иначе вы рискуете именно той ситуацией, которая вас беспокоит.

Вот два варианта:

  1. Дамп используя системный вызов командной строки

Это замечательно, потому что она сбрасывает базу данных в файл с набором операторов SQL, который восстановит ее для вас с нуля, И сжимает ее с помощью gzip за один шаг. Затем вы создаете резервную копию полученного файла .gz, и все готово.

  1. Дамп с использованием оболочки командной строки sqlite3
0 голосов
/ 17 августа 2010

Я делаю снимок в темноте, не знаю Python, но знаком с SQLite3.

Pros

  • Безопасное резервное копирование в качестве баз данных SQLiteявляются отдельными файлами
  • Обратная совместимость для отсутствующей функции iterdump().

Минусы

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