sqlalchemy - 项目中的 Alembic、SQLAlchemy 和多个“应用程序”
问题描述
从 Django 的世界来到 SQLAlchemy,我希望将一个项目拆分为多个应用程序,其中模型和视图根据它们的用途捆绑在一起。
例如,我正在编写一个规划器应用程序,我希望在我的项目中拥有Users
并Plans
居住在单独的应用程序中。我想确保如果我必须将这个项目分成更小的项目,我可以做的工作量最少。
我还希望能够使用一个命令相应地生成和运行迁移,这样我就不必在每次添加模型或“应用程序”时重新配置我的 CI 构建。
到目前为止,我在这方面能想到的是
项目结构:
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
文件夹中,并将我想要包含在自动迁移中的模型导入。
但是,当我生成自动迁移时,我必须指定为其生成它们的确切“应用程序”并指定一个分支。
PYTHONPATH=. alembic --name users revision -m 'initial' --rev-id='0000' --branch-label users --autogenerate
当我应用迁移时,我必须为每个分支分别应用它们。
有没有办法在一个命令中相应地完成这些事情而无需编写我自己的自定义脚本?还是有另一种管理迁移的方法?
解决方案
不幸的是,我还没有找到一种开箱即用的方法来做到这一点。我写了关于我们在这里采用的方法。
它的要点是;
- 创建通用迁移功能
- 向每个应用程序(架构、元数据)添加一个包含应用程序特定信息的迁移目录
- 将您的相关应用部分添加到 alembic.ini 文件中,引用每个目录
- 使用从基础开始的分支分别跟踪每个应用程序的迁移
推荐阅读
- python - print a list in a square pattern [python]
- javascript - How to implement vue package
- c# - C# WPF XAML: Layout issues with dynamic stretching, statusbar and horizontal datagrid expansion
- r - 使用 rmarkdown - 和 scale_down 将大表放入 pdf
- pandas - 如何将一行整数附加到熊猫中跨多个列的单个列表中
- javascript - 用户与 iframe 交互后重定向主页
- c# - 如何使用单独项目中的 MVC 视图?
- reactjs - 为什么我的内容没有显示在网格中?(反应.js)
- powerbi - 有没有办法使用 MDX 查询将数据从 HFM 数据库加载到 powerbi 中?
- java - Java流按某个值对列表进行排序,然后按另一个值对重复项进行排序