【问题标题】:How to use the User column for transactions?如何使用用户列进行交易?
【发布时间】:2016-08-29 11:28:25
【问题描述】:

我得到了使用 sqlalchemy-continuum 的建议,它似乎可以满足我开箱即用的要求。

默认情况下,ORM 假定存在用户列。我确实想保存编辑的发起者,但documentation 只说“这是你指定用户类的方式”,而没有说明在实际使用版本化表时如何指定这样的对象。

如何指定负责交易的用户? 是否有类似的方法可以为每个事务添加提交消息/原因/引用(VARCHAR)?

【问题讨论】:

    标签: sqlalchemy-continuum


    【解决方案1】:

    如果您可以从某个全局范围(如 flask.g 或 flask.request)获取用户,您可以创建一个插件,实现 transaction_args() 方法:

    from sqlalchemy_continuum.plugins import Plugin
    
    
    class UserPlugin(Plugin):
    
        def transaction_args(self, uow, session):
            return {
                'user_id': get_user_from_globals()
            }
    

    plugins/flask.pypyramid_plugin.py。您应该返回用户模型的主键值。

    您可以使用TransactionMeta plugin 将其他数据保存在单独的表格中。没有用于扩展 Transaction 类本身的文档化 API。它由TransactionFactory 创建,但在以后的版本中可能会发生变化。将其他数据分开可能是个好主意。

    【讨论】:

      【解决方案2】:

      将此用于本机版本控制:

      from sqlalchemy_continuum import make_versioned
      make_versioned(options={'native_versioning': True},
                     user_cls=None)
      

      它为 db 中的每个表创建版本表。每当表中有更新时,它都会在版本表中为旧数据创建条目。

      这会创建这些新列:{orgion_table}_version 中的 transaction_id、end_transaction_id、operation_type

      【讨论】:

        猜你喜欢
        • 2012-05-08
        • 1970-01-01
        • 2022-10-24
        • 1970-01-01
        • 2021-11-19
        • 2016-10-29
        • 2021-08-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多