代码之家  ›  专栏  ›  技术社区  ›  Esteban Küber

允许用户使用SQLAlchemy从数据库审计跟踪中回滚

  •  4
  • Esteban Küber  · 技术社区  · 16 年前

    我开始在一个新项目中使用SQLAlchemy,在这个项目中,我计划实施一个类似于本文中提出的审计跟踪:

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

    用SQLAlchemy能以一种干净的方式做到这一点吗?

    有什么问题 对的 如何在内部API(业务逻辑和ORM)中公开此功能?

    我一直在努力 user.rollback(ver=42) .

    1 回复  |  直到 9 年前
        1
  •  8
  •   Christian Oudard    16 年前

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

    • 例如,将受版本控制的项分为两个表 Document DocumentVersion . 文件 存储在不同版本之间永远不会更改的信息,以及 文档版本 存储确实发生变化的信息。
    • 给每个 文档版本 “家长”参考。为同一个表创建一个外键,指向文档的早期版本。
    • 通过更新来自的引用回滚到以前的版本 文件 到“当前”版本。不要从链的底部删除版本。
    • 当他们在回滚后生成新版本时,它将创建另一个版本分支。

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

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