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