【问题标题】:Allowing user to rollback from db audit trail with SQLAlchemy允许用户使用 SQLAlchemy 从数据库审计跟踪回滚
【发布时间】:2010-11-30 02:31:05
【问题描述】:

我开始将 SQLAlchemy 用于一个新项目,我计划在该项目中实施类似于在这个问题上提出的审计跟踪:

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

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

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

我曾经是user.rollback(ver=42)

【问题讨论】:

    标签: python sqlalchemy audit rollback


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 允许分支很酷,但是在路上合并不是真的很难吗?
    • 这不像源代码控制。从用户的角度来看,您已经完全删除了 C。您将永远不需要将其合并。它仍然存在的唯一原因是作为审计跟踪,或者您出于某种原因需要手动删除已删除的项目。
    猜你喜欢
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 2013-09-23
    相关资源
    最近更新 更多