2

我得到了使用 sqlalchemy-continuum 的建议,这似乎非常符合我的要求。

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

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

4

2 回答 2

3

如果您可以从某个全局范围(如 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 插件将其他数据保存在单独的表中。没有用于扩展 Transaction 类本身的文档化 API。它是由 创建的TransactionFactory,但在以后的版本中可能会发生变化。将其他数据分开可能是个好主意。

于 2017-01-25T00:53:16.393 回答
-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

于 2018-06-26T06:00:49.337 回答