覆盖SQL Alchemy ORM过滤条件

时间:2017-05-18 13:07:20

标签: python sqlalchemy where-clause

如何在SQLAlchemy查询中撤消过滤条件? E.g。

q = Model.query.filter(Model.age > 25)
q = q.remove_filter(Model.age)  # what is this called?

2 个答案:

答案 0 :(得分:2)

除了其他建议之外,简单(但如果它实际上很简单取决于您的具体情况)解决方案可能就是不应用您不需要的过滤器。

很可能你有一些复杂的代码有条件地应用过滤器,然后你想要撤消一些过滤器。 在这种情况下,您可以将所需的过滤器收集到某个集合中,而不是将所有过滤器应用于查询,例如字典或列表。

然后,您从字典中删除不需要的过滤器,然后将这些收集的过滤器实际应用于查询对象。

答案 1 :(得分:-1)

我不相信这个功能目前存在。话虽这么说,您可以通过直接访问BinaryExpression对象的q.whereclause.clauses列表来查看(并删除)where子句(过滤器)。

如果那是你唯一的过滤器,那么这样的东西就可以了:

q.whereclause.clauses.pop()

但如果你想删除许多特定的过滤器,它会变得有点棘手(而且更黑客)。