项目中的 Alembic、SQLAlchemy 和多个 "apps"

Alembic, SQLAlchemy and multiple "apps" inside a project

从 Django 的世界来到 SQLAlchemy,我想将一个项目拆分成几个应用程序,其中模型和视图根据它们的用途聚集在一起。

例如,我正在编写一个规划器应用程序,我希望 UsersPlans 分别存在于我的项目中的不同应用程序中。我想确保如果我必须将这个项目拆分成更小的项目,我将尽可能减少工作量。

我还希望能够相应地使用一个命令生成和 运行 迁移,这样我就不必在每次添加模型或"app".

到目前为止我在这方面能想到的是

项目结构:

my_planner
  +- users
  |  +- migrations
  |  |  +- versions
  |  |  |  +- 0000_initial.py
  |  |  +- __init__.py
  |  |  +- env.py
  |  |  +- script.py.mako
  |  +- __init__.py
  |  +- models.py
  +- plans (same structure as users)

alembic.ini:

[alembic]
script_location = alembic/migrations # this doesn't seem to matter
version_locations = users/migrations/versions plans/migrations/options

[users]
script_location = users/migrations

[plans]
script_location = plans/migrations

然后我不得不将 env.py 文件放入我的 migrations 文件夹中,并将我想要包含在自动迁移中的模型导入。

但是,当我生成自动迁移时,我必须指定生成它们的确切 "apps" 并指定一个分支。

PYTHONPATH=. alembic --name users revision -m 'initial'  --rev-id='0000' --branch-label users --autogenerate

当我应用迁移时,我必须为每个分支单独应用它们。

有没有办法在一个命令中相应地完成这些事情而无需编写我自己的自定义脚本?或者是否有另一种管理迁移的方法?

不幸的是,我还没有找到一种开箱即用的方法来做到这一点。我写了我们使用 here.

的方法

大意是;

  • 创建通用迁移功能
  • 向每个应用程序(模式、元数据)添加一个包含应用程序特定信息的迁移目录
  • 将您的相关应用程序部分添加到 alembic.ini 文件,引用每个目录
  • 使用从基础开始的分支分别跟踪每个应用程序的迁移