簡體   English   中英

混合屬性加入sqlalchemy

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM