【问题标题】:Selective versioning with SQLAlchemy使用 SQLAlchemy 进行选择性版本控制
【发布时间】:2014-12-24 20:59:51
【问题描述】:

在我的应用中,我需要对象修改历史记录。这种方法非常适合:

http://docs.sqlalchemy.org/en/rel_0_9/orm/examples.html#module-examples.versioned_history

但是,由于输入的数据相当复杂,我不希望每次新版本都保存它;只有在数据验证、编辑等之后,对象才应该在修改后提交和版本化。

当然,我可以为每个MyClass 创建一个MyClassScratchpad,让用户填写MyClassScratchpad 实例,然后复制到MyClass 实例进行版本控制,但这相当麻烦。

是否可以在 SQA 对象上暂停版本控制,然后再打开?

【问题讨论】:

    标签: python sqlalchemy


    【解决方案1】:

    我重新审视了这个问题,因为它是在使用 versioned_history 时使用更改数字进行版本化的同一行,并且我需要一个包含多行的审计跟踪来获取更改值的历史记录。 versioned_rows.py 这样做:

    http://docs.sqlalchemy.org/en/rel_0_9/orm/examples.html#module-examples.versioned_rows

    必要的修改原来是微不足道的:

    class VersionExtension(SessionExtension):
        def before_flush(self, session, flush_context, instances):
            for instance in session.dirty:
                ...
                if hasattr(instance, '_suspend_versioning') and getattr(instance, '_suspend_versioning') is True:
                    continue
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-06
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      • 1970-01-01
      • 2013-08-17
      • 1970-01-01
      • 2017-08-23
      相关资源
      最近更新 更多