5

我正在尝试为我的 sqlalchemy 数据库实现版本控制(使用此处的示例:http: //docs.sqlalchemy.org/en/rel_0_7/orm/examples.html#versioned-objects和来自源压缩包的 history_meta.py .)

使用该示例,我能够成功获取旧版本的对象:

history = Person.__history_mapper__.class_
old_person = history.filter(Person.id = instance.id, 
    history.version==someoldversion).one()

我还可以获得它指向的任何对象的旧版本。

它在 sqlalchemy 版本控制代码中的实现方式是添加一个名为 person_history 的额外表。此表包含 Person 在特定版本中的所有字段 + 一个版本字段。

但是,我需要对关系进行版本控制。例如,也许这个人曾经有一辆汽车,但现在没有了,我需要得到他拥有的版本。谁能建议扩展示例以使其成为可能的最佳方法?

4

1 回答 1

2

作为数据建模问题,您的问题可能比找出 SA 中的功能更容易解决。在您的 Person-Car 示例中,可以将隐含的多对多关系 (car_ownership_timeperiods) 想象为 Title,该对象记录了 Person 对 Car 的所有权。

通过将隐式多对多关系表提升为架构中的完整对象,您保留了关联人员和汽车的能力,并且还可以在标题上使用 SA 的所有功能,包括跟踪历史记录(如果您愿意)(尽管您的示例的查询(一个人过去拥有哪些汽车)是一个普通的等值连接)。

于 2012-07-31T02:25:56.663 回答