SQLALchemy从关系中反规范化字段

时间:2013-10-19 22:34:54

标签: sqlalchemy

我有一个带有自我关系和非规范化字段的模型,其中有一些来自相关行的值。有没有办法让它们自动保持同步,而不必通过属性引导关系?

示例:

class Node(Base):
    __tablename__ = 'node'
    id = Column(Integer, primary_key=True)
    id_parent = Column(Integer, ForeignKey('node.id))
    data = Column(String(64))
    last_modified = Column(DateTime, onupdate=utcnow)
    parent_last_modified = Column(DateTime, onupdate=utcnow)

    parent = relationship('Node', remote_side=[id])

我希望将parent_last_modified与parent.last_modified保持同步,以便随时更改。如果我可以通过parent.last_modified到达parent_last_modified并到达非规范化字段而不是进行新查询,那就更好了。

1 个答案:

答案 0 :(得分:0)

以下事件回调解决了问题:

@event.listens_for(Node.parent, 'set')
def node_parent_listener(node, parent, previous, initiator):
    if parent is None:
        node.parent_last_modified = None
    else:
        node.parent_last_modified = parent.last_modified