如何使用“用户”列进行交易?

时间:2016-08-29 11:28:26

标签: sqlalchemy-continuum

我建议使用sqlalchemy-continuum,这似乎非常符合我的想法。

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

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

2 个答案:

答案 0 :(得分:2)

如果您可以从某个全局范围(例如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创建,但在以后的版本中可能会更改。将额外的数据分开是一个好主意。

答案 1 :(得分:-1)

将其用于本机版本控制:

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