如何在SQLAlchemy中创建自定义filter_by

时间:2014-04-25 01:50:03

标签: python sqlalchemy

我想创建一个稍微复杂的filter_by - 如果我传递一些kwargs和值,有些是None,那么这些都不包含在过滤器中。我不确定如何全局覆盖filter_by

有效的我正在寻找的是:

data = {'is_enabled': True, 'city': 'SF', 'address': None}
query.smart_filter(data)

和smart_filter排除了地址'字段和调用filter_by与' is_enabled'和' city'值。

我有什么方法可以建立这样的东西吗?

1 个答案:

答案 0 :(得分:4)

子类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)