CLI 应用程序使用的嵌入式 SQLite 数据库是否应该上传到版本控制(Git)?

Should an embedded SQLite DB used by CLI app be uploaded to version-control (Git)?

我正在开发 Python CLI 应用程序,它必须管理 sqlite 数据库上的一些数据(创建、更新和删除记录)。我希望用户能够安装该应用程序并立即使用它。所以我的问题是,我可以只将一个空的 sqlite 数据库上传到 GitHub 吗?或者我应该只上传一个架构文件并在安装过程中在构建步骤中构建数据库?我想如果采用第二种方式,用户应该预装 sqlite,否则安装将失败。我想要的是让他们只安装应用程序,而不用担心依赖关系等问题。

如果你的sqlite db有一些pre tables和records,你应该把它上传到vc以便用户使用。但是如果您需要为项目的每个实例创建一个干净的数据库,我建议您在应用程序的初始化过程中创建数据库。

此外,如果您的应用程序需要数据库中的一些预数据,最佳做法之一是将数据放入 predata.json 之类的文件中,并在初始化期间创建数据库并将其导入数据库。

谈到SQLite,我的理解是SQLite通常用作嵌入式数据库,因此用户不需要SQLite preinstalled. (当然,它可以用作独立的数据库服务器,但它主要以其“易于嵌入”而闻名......也就是 运行)。不费吹灰之力,在嵌入的形式中,客户端自己会创建这个 db.

使用 SQLite 只是一行:

conn = sqlite3.connect('my.db')

conn = sqlite3.connect('/path/to/my.db')

甚至在内存中(作为缓存)

conn = sqlite3.connect(':memory:')

当此行 运行s 时,它将通过打开文件(如果存在)或创建此文件(作为空 DB)(如果文件不存在)来创建连接。简而言之,SQLite 库将始终读取现有文件或在文件不存在时创建它。因此,您将始终拥有开箱即用的 运行ning 数据库。 (我唯一能看到它失败的情况是这个 db 文件由于某种原因损坏或者 SQLite 库由于权限问题无法在某个位置创建文件)

从用户的角度(或开发人员的角度)来看,安装 SQLite 不需要做任何事情。嵌入式数据库或任何要预安装的东西都没有外部依赖性。它很简单。如果有其他应用程序共享这个数据库,他们只需要打开特定的 db 文件就可以了。

因此回到您的主要问题,一般的最佳做法是应用程序在其第一个 运行 上通过导入 SQL/Schema(和初始数据)文件(SQL 文件、CSV、JSON、XML,来自代码等...)。 SQL/Schema 文件可以与 Github(或任何 VCS)中的应用程序源一起维护,或者以打包格式(zip、tar...等)与二进制文件一起打包给予分发。因此,对于您的情况,您想到的第二种方法可能更好。从代码维护和审查的角度来看,这甚至很好。

最好不要将“数据库”作为二进制文件上传,而是在第一个实例化它 运行 并用数据填充它。