在Python 2.5中备份sqlite3数据库

2 投票
2 回答
1920 浏览
提问于 2025-04-16 01:24

我正在做一个项目,需要同时支持Python 2.5和2.6,并且使用sqlite3。我想在程序内部备份数据库。

看起来有两种方法可以做到这一点:一种是在sqlite3中创建一个新的数据库,然后把所有数据移动过去;另一种就是直接复制硬盘上的数据库文件。

我的直觉(也是我想在这里测试的一部分)是,直接在系统内复制数据更安全,因为这样可以确保我不会在文件不稳定的情况下去复制它。虽然我可以防范很多基本错误,但要保护自己不犯所有可能的复制错误,这可真是个挑战。

不过,由于我需要支持Python 2.5,所以我没有iterdump()这个功能,在程序内部创建备份会比较耗时(这让直接复制文件变得很有吸引力)。

直接复制文件有什么优缺点?在2.5中有没有简单的方法可以像2.6的iterdump()那样复制整个数据库?

2 个回答

0

我在尝试猜测,因为我不懂Python,但对SQLite3有点了解。

优点

  • 安全备份,因为SQLite数据库就是一个单独的文件。
  • 向后兼容,可以解决你缺少的iterdump()功能。

缺点

  • 数据库的大小可能会限制复制。
3

复制一个正在使用中的SQLite3文件,99%的情况下可能是可行的,但这并不安全,我是通过亲身经历了解到这一点的。也就是说,你确实可以复制数据库文件本身,但你必须确保所有与数据库文件相关的操作都已经关闭,否则你就有可能遇到你所担心的问题。

这里有两个选择:

  1. 通过系统调用命令行来导出

这个方法很好,因为它会把数据库导出成一个包含一系列SQL语句的文件,这些语句可以帮助你从头开始重建数据库,并且在一个步骤中使用gzip进行压缩。然后你只需备份生成的.gz文件,就完成了。

  1. 使用sqlite3命令行工具进行导出

撰写回答