我开始将 SQLAlchemy 用于一个新项目,我计划在该项目中实现类似于在此问题上提出的审计跟踪:
由于我已经拥有“有趣”对象的完整历史,我正在考虑允许用户回滚到给定版本,让他们有可能拥有无限的
undo
。这可以用 SQLAlchemy 以干净的方式完成吗?
在内部 API(业务逻辑和 ORM)中公开此功能的正确方法是什么?
我是
user.rollback(ver=42)
的一部分。 最佳答案
虽然我没有专门使用 SQLAlchemy,但我可以给你一些可以在任何 ORM 中轻松实现的通用技巧:
Document
和 DocumentVersion
。 Document
存储在版本之间永远不会改变的信息,而 DocumentVersion
存储确实改变的信息。 DocumentVersion
一个“父”引用。为同一个表创建一个外键,指向文档的先前版本。 Document
的引用更新到“当前”版本来回滚到以前的版本。不要从链的底部删除版本。 示例,创建A、B、C,回滚到B,创建D、E:
(A)
|
(B)
| \
(C) (D)
|
(E)