【发布时间】:2021-05-05 15:34:31
【问题描述】:
我想使用 Flask + SQLAlchemy 构建一个多租户应用程序。官方 SQLAlchemy 文档 suggest that,要使用多租户,表应该分布在每个租户的 1 个方案上,并在引擎级别处理不同的租户。
维护多个方案对我来说似乎有点臃肿,我想知道如果设计正确,以下对所有租户使用相同表的方法是否可行,如果不可行,为什么不:
- 那些包含租户拥有记录的表有一个不可为空的列
tenant_id,指示哪个租户“拥有”该行。 - 创建/更新语句(
INSERT和UPDATE)自动将此列的值设置为当前租户。 - 读取/删除查询(
SELECT或DELETE)查询会自动将WHERE tenant_id=:current tenant子句/过滤器添加到 SQL。 -
tenant_id的值可以从 JSON Web Token 派生。 - 这个自动设置的 value/where 子句可以在后台管理,例如通过this answer 中的自定义会话或使用预提交挂钩。
我几乎找不到关于这种方法的任何信息(除了这个名为 MultiAlchemy 的软件包,它的工作原理似乎与我的描述相似,但已存档且 7 年未更新)。我的直觉告诉我,这是有原因的。
tl;dr:为什么不在 SQLAlchemy 中使用共享方案进行多租户?
【问题讨论】:
标签: sqlalchemy flask-sqlalchemy multi-tenant