簡體   English   中英

SQLAlchemy:混合屬性,先排序並返回

[英]SQLAlchemy: hybrid property, sort and return first

假設我有以下模型。 披薩的狀態可以更新多次,但我希望我的 Pizza 模型有一個返回最新狀態的latest_status

class PizzaStatus(Base):
    updated_at = Column(DateTime, nullable=False, server_default=func.now())
    type = Column(Integer, nullable=False)
    pizza_id = Column(Integer, ForeignKey("pizzas.id"))


class Pizza(Base):

    id = Column(Integer, primary_key=True)

    # Always load the statuses when querying an object
    statuses = relationship("PizzaStatus", backref="pizza", lazy="selectin")

    @typed_hybrid_property
    def latest_status(self):
        return max(self.statuses, key= lambda status: status.updated_at)

    @latest_status.expression
    def latest_status(cls):
        return select([Pizza.statuses]).where(PizzaStatus.pizza_id == cls.id).order_by(desc(PizzaStatus.updated_at)).first()

當我獲取Pizza對象時,我可以執行以下操作:

pizza = session.query(Pizza).all()
pizza.latest_status

這意味着在Pizza的實例級別上實現的混合屬性有效。

但是,我不能這樣做:

session.query(Pizza).filter(Pizza.latest_status.type.in_(1, 2, 3, 4))

我收到此錯誤:

AttributeError: 'Select' object has no attribute 'first'

這是我想要實現的目標:從我的數據庫中查詢Pizza對象時,我想根據它們的最新狀態過濾比薩餅。 我希望這些狀態位於有效狀態類型列表中。 我嘗試過這樣的方法: sqlalchemy hybrid_attribute expression ,但我無法讓它們工作。 你能幫我一把嗎?

嘗試limit(1)而不是first 一個用於 ORM,另一個用於核心(您正在使用)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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