我使用 SQLite 作为基于 PySide 的桌面应用程序的应用程序文件格式(请参阅此处了解为什么要这样做)。也就是说,当用户使用我的应用程序时,他们的数据会保存在他们机器上的单个数据库文件中。我正在使用 SQLAlchemy ORM 与数据库进行通信。
当我发布应用程序的新版本时,我可能会修改数据库模式。我不希望用户每次更改架构时都必须丢弃他们的数据,因此我需要将他们的数据库迁移到最新格式。此外,我创建了很多临时数据库来保存数据的子集以供某些外部进程使用。我想用 alembic 创建这些数据库,以便用正确的版本标记它们。
我有几个问题:
有没有办法从我的 Python 代码中调用 alembic?我认为必须使用
Popen
纯 Python 模块很奇怪,但文档只使用命令行中的 alembic。主要是,我需要将数据库位置更改为用户数据库所在的位置。如果这不可能,我可以在不编辑 .ini 文件的情况下从命令行指定新的数据库位置吗?这将使调用 alembic
Popen
没什么大不了的。我看到 alembic 将其版本信息保存在一个名为 的简单表下
alembic_version
,其中一列称为version_num
,单行指定版本。我可以在我的架构中添加一个alembic_version
表并在创建新数据库时用最新版本填充它,这样就没有开销了吗?这还是个好主意吗?我应该只使用 alembic 创建所有数据库吗?
我在项目目录中用于开发的单个数据库非常适合使用 alembic。我想使用 alembic 在任意位置方便地迁移和创建数据库,最好是通过某种 Python API,而不是命令行。这个应用程序也被 cx_Freeze 冻结,以防万一。
谢谢!