我正在尝试为我的 sqlalchemy 数据库实现版本控制(使用这里的示例:http://docs.sqlalchemy.org/en/rel_0_7/orm/examples.html#versioned-objects 和来自源 tarball 的 history_meta.py。)
使用该示例,我能够成功获取对象的旧版本:
history = Person.__history_mapper__.class_
old_person = history.filter(Person.id = instance.id,
history.version==someoldversion).one()
我还可以获得它指向的任何对象的旧版本。
它在 sqlalchemy 版本控制代码中的实现方式是添加一个名为 person_history 的额外表。此表包含 Person 在特定版本中的所有字段 + 版本字段。
但是,我需要的是对关系进行版本控制。例如,也许这个人曾经有一辆汽车,但现在没有了,我需要得到他(她)拥有的版本。任何人都可以建议扩展示例以使其成为可能的最佳方法吗?
最佳答案
您的问题作为数据建模问题可能比在 SA 中找出特征更容易解决。在您的 Person-Car 示例中,您可以将隐含的多对多关系 (car_ownership_timeperiods) 想象为 Title,该对象记录了 Person 对汽车的所有权。
通过将隐式多对多关系表提升为模式中的完整对象,您保留了关联人员和汽车的能力,并且还可以在标题上使用 SA 的所有功能,包括跟踪历史(如果您愿意)尽管对您的示例的查询(一个人过去拥有哪些汽车)是一个简单的 equijoin)。
关于sql - 如何在关系上使用 sqlalchemy 版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11622374/