sqlalchemy,在预定义的查询过滤器中使用可调用的

时间:2014-02-26 12:14:53

标签: python sqlalchemy

我想要以相同的方式过滤很多实体,以及几个类似的标准。我想准备这些标准,然后在需要时立即应用它们。

我可以这样写:

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()

我该怎么做?

1 个答案:

答案 0 :(得分:0)

如果你可以在之前评估它们你构建查询 - 这应该用于存储它们就好了 - 你可以将它们存储在可调用的地方:

filter = lambda: Entity.owner == get_current_user()

query = session.query(Entity).... #some more 
query = query.filter(filter())

您可以通过这种方式存储任何复杂的表达式。使用常规函数来处理更详细的案例。