我想创建一个稍微复杂的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'值。
我有什么方法可以建立这样的东西吗?
答案 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)