我想要以相同的方式过滤很多实体,以及几个类似的标准。我想准备这些标准,然后在需要时立即应用它们。
我可以这样写:
filter = Entity.owner==some_user
然后查询:
query = session.query(Entity).... #some more
query = query.filter(filter)
当some_user
被预先设定时,这没关系。现在我需要在那里传递一个callable,所以它将在实际的查询构建时进行评估:比如,用some_user
调用的结果替换get_current_user()
变量。
您可能会注意到这些树方式不会出现:
filter = Entity.owner==get_current_user
filter = Entity.owner==get_current_user()
filter = Entity.owner==lambda: get_current_user()
我该怎么做?
答案 0 :(得分:0)
如果你可以在之前评估它们你构建查询 - 这应该用于存储它们就好了 - 你可以将它们存储在可调用的地方:
filter = lambda: Entity.owner == get_current_user()
query = session.query(Entity).... #some more
query = query.filter(filter())
您可以通过这种方式存储任何复杂的表达式。使用常规函数来处理更详细的案例。