我有以下数据模型:
class TS(Base): # Parent
__tablename__ = 'ts'
id = Column(Integer, primary_key=True)
inspection_data = relationship('ID', backref='ts', uselist=False)
以及
^{2}$现在我想创建一个混合属性“状态”,它告诉我下一次检查是否过期(即今天之后)
我解决了这个问题:
@hybrid_property
def status(self):
now = datetime.datetime.utcnow().date()
delta = self.next_inspection - now
if delta.days > 30:
return 3 # OK, next inspection far away
elif delta.days > 0:
return 2 # Next inspection getting close
else: # We are overdue
return 1
这在类和实例级都可以工作,这意味着我甚至可以使用状态查询。为了工作,我不得不补充:
@status.comparator
def status(cls):
return DateTimeComparator(cls.next_inspection)
与
class DateTimeComparator(Comparator):
def __gt__(self, other):
return self.__clause_element__() > other
# same for __lt__, __eq__ etc
现在来回答我的问题: 我不想像上面的例子那样返回状态值1、2或3,而是返回存储在具有以下模型的另一个表中的三个值之一:
class IDStatusValues(Base):
__tablename__ = 'ins_status_values'
id = Column(Integer, primary_key=True)
value = Column(Unicode, unique=True, nullable=True, info={})
ID_id = Column(Integer, ForeignKey('ins.id'))
包括以下数据:
id | value
-----------
0 | 'OK'
1 | 'APPROACHING'
2 | 'OVERDUE'
也就是说,我想将status方法更改为如下所示:
@hybrid_property
def status(self):
now = datetime.datetime.utcnow().date()
delta = self.next_inspection - now
if delta.days > 30:
return IDStatusValues.get(0) # OK, next inspection far away
elif delta.days > 0:
return IDStatusValues.get(1) # Next inspection getting close
else: # We are overdue
return IDStatusValues.get(2)
但我不明白如何在这个函数中进行查询。我承认,到目前为止,我只从事声明式的工作,对真正的SQL/expressive sqlalchemy不是很有经验。在
相关问题 更多 >
编程相关推荐