对 SQLAlchemy 中每个查询的所有表应用全局过滤器

2023-11-23

我们正在尝试设置一个 SaaS 服务,支持共享数据库和架构中的多租户。我们计划在所有表上都有一个tenant_id 列。我想做的是,开发人员不必编写任何额外的代码,我的查询就可以按此租户 ID 自动过滤所有涉及的表。在 SQL Alchemy 中是否有一种透明的方法来实现这一点?

我发现如何覆盖默认查询对象:

self.session = sessionmaker(bind=engine, query_cls=TenantLimitingQuery)

但在 TenantLimitingQuery 内部如何将其应用于所有涉及的表?

class TenantLimitingQuery(Query):
    def get(self, ident):
        #apply filter here

我的表具有相同的列来标识名为tenant_id的租户,因此在该获取函数中我需要按tenant_id=current_tenant_id进行过滤


这在使用食谱维基,转载于此:

from sqlalchemy.orm.query import Query

class LimitingQuery(Query):

    def get(self, ident):
        # override get() so that the flag is always checked in the 
        # DB as opposed to pulling from the identity map. - this is optional.
        return Query.get(self.populate_existing(), ident)

    def __iter__(self):
        return Query.__iter__(self.private())

    def from_self(self, *ent):
        # override from_self() to automatically apply
        # the criterion too.   this works with count() and
        # others.
        return Query.from_self(self.private(), *ent)

    def private(self):
        mzero = self._mapper_zero()
        if mzero is not None:
            crit = mzero.class_.public == True

            return self.enable_assertions(False).filter(crit)
        else:
            return self

这个想法是在迭代查询对象时按需应用过滤器。

如果您希望过滤器也应用于关系,则需要使用这个食谱反而。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对 SQLAlchemy 中每个查询的所有表应用全局过滤器 的相关文章

随机推荐

  • SpeechSynthesizer 的 SpeakProgressEventArgs 是否不准确?

    使用 Net 3 5 中的 System Speech Synthesis SpeechSynthesizer 类 SpeakProgressEventArgs 的 AudioPosition 属性似乎不准确 以下代码产生以下输出 Code
  • Python 夏令时

    如何检查夏令时是否生效 您可以使用time localtime并看看tm isdst返回值中的标志 gt gt gt import time gt gt gt time localtime 2010 5 21 21 48 51 4 141
  • 使用 pygame 旋转图像[重复]

    这个问题在这里已经有答案了 我是 pygame 新手 想要编写一些代码 每 10 秒将图像旋转 90 度 我的代码如下所示 import pygame import time from pygame locals import pygame
  • php中如何判断变量是否为null或未定义

    有没有singlePHP 中可以创建函数来判断变量是 NULL 还是未定义 我将把变量传递给函数 如果需要的话通过引用 但直到运行时我才知道变量的名称 isset and is null 不区分 NULL 和未定义 array key ex
  • 如何在 Linq 中添加两个列表,以便 linkedList[x] = listOne[x] + listTwo[x]?

    我想添加两个数字类型的列表 以便 添加列表 x 列表一 x 列表二 x 列表的输出需要是一个 Generic IEnumerable 我可以在将来的 linq 查询中使用它 虽然我能够使用下面的代码来做到这一点 但我忍不住觉得一定有更好的方
  • 如何理解在 PyTorch 中创建叶张量?

    来自 PyTorch文档 b torch rand 10 requires grad True cuda b is leaf False b was created by the operation that cast a cpu Tens
  • 错误:通用字符名称不完整 \U

    我正在尝试编写一个更改 txt 文件的 C 程序 但是 当我运行它时 我收到一个奇怪的错误 错误 6 20 C Dev Cpp Homework6 cpp 不完整的通用字符名称 U My code include
  • 在 pandas read_csv() 中引用参数

    我在用着pandas read csv 我发现quotechar并引用其中的参数 pandas read csv filepath or buffer sep quotechar quoting 0 这些参数的具体用途是什么 我检查了文档
  • 使用 SearchView 小部件时如何在 RecyclerView 中突出显示过滤后的文本

    如何在 RecyclerView 中突出显示搜索文本结果 我发现了一些关于 Spannable TextView 的帖子 但不确定在我的情况下在哪里实现 感谢您的关注和帮助 主要活动或第 1 章 public class Chapter1
  • 如何在运行时设置活动的父活动?

    我有任意数量的分层嵌套视图 活动 操作栏应显示向上导航按钮 以在任何视图中导航到更高级别 为此 谷歌文档说我必须在活动的 xml 定义中使用标签设置父活动 但是 我正在动态创建活动 并且子元素可以与其父元素具有相同的活动 那么如何在运行时将
  • 将正则表达式选项传递给 PowerShell [regex] 类型

    我使用下面的正则表达式代码捕获两个匹配的组 regex regex 0 9 1 20 b kb mb gb tb matches regex match minSize size int64 matches Groups 1 Value u
  • 在 Android 上使用 addJavascriptInterface() 传递 JavaScript 对象

    是否可以使用 addJavascriptInterface 将 JavaScript 对象从 JavaScript 传递到 Java 沿着这些思路 var javaScriptObject field1 string1 field2 str
  • 十六进制值 0x0B,是 XML 中的无效字符问题

    我遇到异常 十六进制值 0x0B 是无效字符 第 23 行 第 22 号位置 我已经尝试过解决方案Here 但它对我不起作用 由于我的项目是在3 5版本 我无法使用XmlConvert IsXmlChar method MSDN 怎么处理呢
  • 我可以使用一个 HTML5 应用程序控制两个浏览器窗口吗?

    我希望我的 HTML5 应用程序能够绘制到两个不同的屏幕上 这 我认为 意味着我需要有两个不同的浏览器窗口 每个屏幕上一个 这可能吗 看来我真的必须将相同的应用程序加载到两个窗口中 并以某种方式让窗口相互通信 我找不到如何实现此目的的示例
  • 使用 FTPS 将文件从 Android 传输到服务器 [重复]

    这个问题在这里已经有答案了 我正在使用Apache Commons FTP 库在我的 Android 应用程序中 我通过 FTPS 建立连接 虽然它可以完美地连接到服务器 但在传输文件时遇到问题 出于安全原因 订购应用程序的客户端要求在使用
  • 实体框架 PostgreSQL

    有人可以告诉我如何让 MS Entity Framework 与 PostgreSQL 一起使用吗 另外 实体框架如何与 Mono 一起工作 您能否推荐其他类似的可在 Mono 上运行的 ORM 工具 您对它们有何看法 实体框架还可以与 N
  • 为什么要使用 !!操作员

    我在一个例子中遇到了一些红宝石 def role role return self roles find by name role to s camelize end 你为什么会使用 难道不一样吗 return self roles fin
  • 使用故事板时如何子类化导航控制器?

    我使用 Xcode 菜单 编辑器 嵌入 导航控制器 在界面生成器中使用故事板 看来在 iOS 6 中你必须子类化 UINavigationController 以允许所有方向 NSUInteger supportedInterfaceOri
  • 列出 PostgreSQL 中带有索引的列

    我想获取 PostgreSQL 中索引所在的列 在 MySQL 中你可以使用SHOW INDEXES FOR table并看看Column name柱子 mysql gt show indexes from foos Table Non u
  • 对 SQLAlchemy 中每个查询的所有表应用全局过滤器

    我们正在尝试设置一个 SaaS 服务 支持共享数据库和架构中的多租户 我们计划在所有表上都有一个tenant id 列 我想做的是 开发人员不必编写任何额外的代码 我的查询就可以按此租户 ID 自动过滤所有涉及的表 在 SQL Alchem