Python sqlalchemy中具有连接的混合属性

Python sqlalchemy中具有连接的混合属性,python,sql,sqlalchemy,Python,Sql,Sqlalchemy,我可能还没有完全掌握@hybrid_property的用法。但我试图做的是使基于另一个表中的列访问计算值变得容易,因此需要联接 因此,我所拥有的是这样的东西(虽然有效,但很尴尬,感觉不对劲): 这要求我在需要使用days_ago属性时,由调用者在Action表中添加联接。hybrid_属性是简化查询的正确方法吗?我需要获取days_ago值。您需要通过联接或延迟加载加载或访问操作行(注意这里不清楚事件和动作是什么,我假设您只有Item.actions->Action) 非“表达”几天前的版本打算

我可能还没有完全掌握
@hybrid_property
的用法。但我试图做的是使基于另一个表中的列访问计算值变得容易,因此需要联接

因此,我所拥有的是这样的东西(虽然有效,但很尴尬,感觉不对劲):


这要求我在需要使用days_ago属性时,由调用者在
Action
表中添加联接。hybrid_属性是简化查询的正确方法吗?我需要获取days_ago值。

您需要通过联接或延迟加载加载或访问
操作
行(注意这里不清楚
事件
动作
是什么,我假设您只有
Item.actions->Action

非“表达”几天前的
版本
打算针对仅与当前实例相关的
操作
对象运行。通常在混合中,这意味着只需迭代
项.actions
并在Python中对加载的
操作
对象执行操作。虽然在本例中,您正在查找一个简单的聚合,您可以选择运行查询,但它同样是
self
的本地聚合,所以这就像
object\u session(self.query)(func.datediff(…)。从(操作)中选择

针对另一个表形成的混合表达式版本通常要求使用它的查询已经设置了正确的FROM子句,因此它看起来像
session.query(Item).join(Item.actions).filter(Item.days\u ago==xyz)
。这在中进行了解释

如果您能负担得起使用相关子查询的费用,那么这里的表达式作为列_属性可能会更好

class Item():

:

@hybrid_property
def days_ago(self):
    # Can I even write a python version of this ?
    pass

@days_ago.expression
def days_ago(cls):
    return func.datediff(func.NOW(), func.MAX(Event.date_started))