我有以下sqlalchemy模型
class Alert(Base):
__tablename__ = 'alerts'
id = Column(Integer, primary_key=True)
alert_text = Column(Text)
@hybrid_property
def latest_state(self):
if self.state_changes:
return self.state_changes[-1]
return self.state_changes
class AlertStateChange(Base):
__tablename__ = 'alert_state_change'
__table_args__ = (
PrimaryKeyConstraint('id', name='pk_alert_state_change'),
)
id = Column(Integer)
reason_id = Column(Integer, ForeignKey('reasons.id'))
alert_id = Column(Integer, ForeignKey(Alert.id))
reason = relationship('Reason', backref='state_changes')
alert = relationship(Alert, backref='state_changes')
status = Column(Text)
date = Column(DateTime)
class Reason(Base):
__tablename__ = 'reasons'
__table_args__ = (
PrimaryKeyConstraint('id', name='pk_reason'),
)
id = Column(Integer)
reason_text = Column(Text)
因此,基本上警报有一个状态,是编辑的原因。当一个状态改变时,用户也会输入一个注释,并且关于谁发布了改变的信息也会被保留,但是为了简单起见,我已经排除了这两个字段。状态可以是open
或closed
,当用户打开警报时,不需要任何原因,因此原因id可以为空。你知道吗
我想能够过滤警报,目前关闭了一个特定的原因文本,但无法找到正确的连接。你知道吗
我会从这个开始
session.query(Alert).join(AlertStateChange).join(Reason).filter(Reason.reason_text=='wanted reason)
但这会给我带来所有警报,过去或现在有一段时间是以“通缉理由”关闭的。如何仅使用当前状态(即每个警报的最新记录)进行筛选
目前没有回答
相关问题 更多 >
编程相关推荐