CLI应用程序使用的嵌入式SQLite DB是否应上传到版本控制(Git)



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

说到SQLite,我的理解是SQLite通常被用作嵌入式数据库,因此用户不需要拥有SQLitepreinstalled。(当然,它可以用作独立的DB服务器,但它主要以"易于嵌入"而闻名,也就是说……只需运行即可(。不需要任何努力,在嵌入式表单中,客户端本身就会创建这个db

使用SQLite只是一句话:

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

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

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

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

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

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

因此,回到你的主要问题,一般的最佳实践是,应用程序在第一次运行时通过导入SQL/Schema(和初始数据(文件(SQL文件、CSV、JSON、XML、from code等(来实例化数据库(无论数据库是什么(。SQL/Schem文件可以与应用程序源一起在Github(或任何VCS(中维护,也可以与打包格式的二进制文件(zip、tar等(打包这是为分发而给出的。因此,在您的情况下,您考虑的第二种方法可能会更好。从代码维护和审查的角度来看,这甚至是很好的。

最好不要上传";数据库";作为二进制文件,最好在第一次运行时实例化它并用数据填充它。

如果您的sqlitedb有一些预表和记录,您应该将其上传到vc以便用户使用。但是,如果您需要为项目的每个实例创建一个干净的数据库,我建议在应用程序的初始化过程中创建数据库。

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

最新更新