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

Est*_*ber 4 python audit sqlalchemy rollback

我开始将SQLAlchemy用于一个新项目,我计划在这个项目中实现类似于此静默提议的审计跟踪:

因为我已经拥有了"有趣"对象的完整历史,所以我在考虑允许用户回滚给定版本,让他们有可能无限制undo.

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

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

我是一路走来的路user.rollback(ver=42).

Chr*_*ard 8

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

  • 将版本化的项目分成两个表格,比如说DocumentDocumentVersion.Document存储不会在版本之间更改的DocumentVersion信息,并存储确实发生更改的信息.
  • 给每个DocumentVersion"父"参考.为同一个表创建一个外键,指向该文档的先前版本.
  • 通过将引用更新为Document"当前"版本,回滚到以前的版本.不要删除链底部的版本.
  • 在回滚后制作更新的版本时,它将创建另一个版本的分支.

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

(A)
 |
(B)
 | \
(C) (D)
     |
    (E)
Run Code Online (Sandbox Code Playgroud)

  • 这不像源代码控制。从用户的角度来看,你已经完全删除了 C。你永远不需要合并它。它仍然存在的唯一原因是作为审计跟踪,或者出于某种原因需要手动找出已删除的项目。 (2认同)

归档时间:

查看次数:

1134 次

最近记录:

16 年 前