Atribut hibrida
adalah metode khusus yang bertindak sebagai properti Python dan ekspresi SQL. Selama difficulty
Anda fungsi dapat diekspresikan dalam SQL, dapat digunakan untuk memfilter dan mengurutkan seperti kolom biasa.
Misalnya, jika Anda menghitung kesulitan sebagai jumlah burung beo yang dimiliki suatu masalah, kali sepuluh jika masalahnya lebih lama dari 30 hari, Anda akan menggunakan:
from datetime import datetime, timedelta
from sqlalchemy import Column, Integer, DateTime, case
from sqlalchemy.ext.hybrid import hybrid_property
class Problem(Base):
parrots = Column(Integer, nullable=False, default=1)
created = Column(DateTime, nullable=False, default=datetime.utcnow)
@hybrid_property
def difficulty(self):
# this getter is used when accessing the property of an instance
if self.created <= (datetime.utcnow() - timedelta(30)):
return self.parrots * 10
return self.parrots
@difficulty.expression
def difficulty(cls):
# this expression is used when querying the model
return case(
[(cls.created <= (datetime.utcnow() - timedelta(30)), cls.parrots * 10)],
else_=cls.parrots
)
dan tanyakan dengan:
session.query(Problem).order_by(Problem.difficulty.desc())