【问题标题】:Super with sqlalchemy mixins for default valuesSuper 使用 sqlalchemy mixins 作为默认值
【发布时间】:2013-03-05 15:20:36
【问题描述】:

我有一个 sqlalchemy mixin,我想为 mixin 的列设置一个默认值,但我还没有找到直接的答案,并且已经采用了各种科学方法的反复试验。这是我的第一次尝试,我还没有机会使用它:

class ExampleMixin(object):
    """Mixin for `AnExample`"""

    def __init__(self, example_id):
       self.example_id = HMAC("{}".format(urandom(32).encode('base_64'))).hexdigest()
       super(ExampleMixin, self).__init__(self.example_id)

    example_id = Column(String(255))

诚然,我还没有完全理解 super 的用法,但是我需要一种方法来为 mixin 提供默认值,而不是将其放入接收 mixin 的模型中。我确信以上内容并不完全正确,但这是我要开始的地方。

如何提供仅在创建时初始化一次的默认值?

【问题讨论】:

    标签: python database-design sqlalchemy mixins


    【解决方案1】:

    根据Mixing in ColumnsColumn Insert/Update Defaults,下面的代码应该可以实现你想要的:

    def _example_id_default():
        return HMAC("{}".format(urandom(32).encode('base_64'))).hexdigest()
    
    class ExampleMixin(object):
        """Mixin for `AnExample`"""
    
        example_id = Column(String(255), default=_example_id_default)
    

    【讨论】:

    • 我已经尝试过了,每次都创建相同的列,这让我很自责,但我会再看一遍。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 2018-09-07
    • 2023-02-06
    • 2018-05-27
    • 2016-12-22
    相关资源
    最近更新 更多