允许用户使用SQLAlchemy从db审计跟踪回滚

时间:2009-09-21 14:42:22

标签: python sqlalchemy audit rollback

我开始使用SQLAlchemy进行一个新项目,我计划实施类似于此静默建议的审计跟踪:

由于我已经拥有了“有趣”对象的完整历史记录,因此我在考虑允许用户回滚到给定版本,让他们可以无限制undo

这可以用SQLAlchemy以干净的方式完成吗?

在内部API(业务逻辑和ORM)中公开此功能的正确方法是什么?

我是user.rollback(ver=42)的方式。

1 个答案:

答案 0 :(得分:8)

虽然我没有专门使用SQLAlchemy,但我可以给你一些可以在任何ORM中轻松实现的一般提示:

  • 将版本化的项目分成两个表格,例如DocumentDocumentVersionDocument存储版本之间永远不会更改的信息,DocumentVersion存储确实发生更改的信息。
  • 为每个DocumentVersion提供“父”参考。为同一个表创建一个外键,指向该文档的先前版本。
  • 通过将引用从Document更新为“当前”版本,回滚到以前的版本。不要删除链底部的版本。
  • 当他们回滚后制作更新的版本时,它将创建另一个版本的分支。

例如,创建A,B,C,回滚到B,创建D,E:

(A)
 |
(B)
 | \
(C) (D)
     |
    (E)