如何在SQLAlchemy中创建自定义的filter_by?

4
我希望能创建一个稍微复杂一些的filter_by,如果我传递了一些kwargs和values,其中一些是None,那么这些参数不会被包含在过滤器中。我不确定如何全局覆盖filter_by
实际上,我需要的是:
data = {'is_enabled': True, 'city': 'SF', 'address': None}
query.smart_filter(data)

而smart_filter排除了“address”字段,并使用“is_enabled”和“city”值调用filter_by。

我是否有办法构建类似的东西?

1个回答

5

继承sqlalchemy.orm.Query类,添加你的smart_filter方法,然后将新类传递给你的sessionmaker。大致如下:

class MyQuery(Query):
    def smart_filter(self, **kwargs):
        kwargs = {key: value for key, value in kwargs.items() 
                  if value is not None}
        return self.filter_by(**kwargs)

Session = sessionmaker(query_cls=MyQuery)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接