[英]hybrid property with join in sqlalchemy
我可能沒有完全掌握@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
表上添加連接。 在我需要獲取days_ago值的情況下,hybrid_property甚至是簡化查詢的正確方法嗎?
無論如何,您需要通過加入或延遲加載來加載或訪問Action
行(請注意,這里不清楚Event
vs. Action
是什么,我假設您只有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 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.