我有以下权杖。警报可以有一个状态更改,并且只能有一个状态更改。 状态更改只能有一个警报。一个状态变化可以有一个原因,也可以有一个原因是在许多状态变化 我尝试了以下模式
class Alert(BaseDb):
__tablename__ = 'alerts'
__table_args__ = (
PrimaryKeyConstraint('id', name='pk_alerts'),
)
id = Column(Integer)
alert_text = Column(Text)
class AlertStateChange(BaseDb):
__tablename__ = 'alert_state_change'
__table_args__ = (
PrimaryKeyConstraint('id', name='pk_alert_state_change'),
ForeignKeyConstraint(
['reason_id'],
['reasons.id'],
name='fk_alert_status_change_reason_id__reasons'
),
ForeignKeyConstraint(
['alert_id'],
['alerts.id'],
name='fk_alert_status_change_alert_id__alert'
),
)
id = Column(Integer)
reason_id = Column(Integer)
alert_id = Column(Integer)
reason = relationship('Reason', backref='status')
alert = relationship('Alert',
backref=backref('status', uselist=False))
status = Column(Text)
但是sqlalchemy允许我为同一个警报(同一个alert_id)添加AlertStateChange对象。它通常使用新的id进行提交
^{pr2}$给我以下警告
SAWarning: Multiple rows returned with uselist=False for lazily-loaded attribute 'Alert.status' % self.parent_property)
返回的对象是添加的第一个AlertStateChange对象。第二个在数据库中,但被忽略。不应该引发异常吗?这不是真正的一对一的关系。我应该将alert_id添加为主键或唯一值,对吗?在
执行以下操作:
uselist=False
unique=True
中设置引用列nullable=False
__init__
,以实现严格的一对一现在它可以工作了。在
相关问题 更多 >
编程相关推荐