gpt4 book ai didi

python - 加入 sqlalchemy 的混合属性

转载 作者:太空宇宙 更新时间:2023-11-03 13:01:20 25 4
gpt4 key购买 nike

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

所以我有这样的东西(它有效但很笨拙并且感觉不对):

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

这要求我在需要使用 days_ago 属性时由调用者在 Action 表上添加连接。 hybrid_property 是否是简化我需要获取 days_ago 值的查询的正确方法?

最佳答案

您需要通过连接或通过延迟加载以某种方式加载或访问 Action 行(请注意,此处不清楚 EventAction 是,我假设您只有 Item.actions -> Action)。

days_ago 的非“表达式”版本旨在对仅与当前实例相关的Action 对象起作用。通常在混合中,这意味着仅遍历 Item.actions 并在 Python 中对加载的 Action 对象执行操作。虽然在这种情况下您正在寻找一个简单的聚合,但您可以选择运行查询,但同样它对于 self 是本地的,所以这就像 object_session(self).query( func.datediff(...)).select_from(Action).with_parent(self).scalar().

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

如果您可以负担得起使用相关子查询,那么此处的表达式最好作为 column_property 生成。请参阅 http://docs.sqlalchemy.org/en/latest/orm/mapping_columns.html#using-column-property-for-column-level-options .

关于python - 加入 sqlalchemy 的混合属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19979303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com