SQLAlchemy,没有JSONB字段的已删除状态的历史记录

时间:2017-09-26 10:35:26

标签: python sqlalchemy jsonb

例如我有一个模型:

class AttributeValue(db.Model):
    id = Column(Integer, primary_key=True)
    value = Column(JSONB(), nullable=False)
    attribute_id = Column(Integer, ForeignKey("attributes.id"), nullable=False)
    ...

    __tablename__ = 'attribute_value'

此表的数据库中有记录。 如果我更改某些记录的 attribute_id 并尝试获取此记录的attribute_id字段的History对象,那么我将得到类似的内容

History(added=[2], unchanged=(), deleted=[1])

如果我更改 并尝试获取此字段的历史记录对象,那么我会得到类似的内容

History(added=[{u'keywords': u'test'}], unchanged=(), deleted=())

因此,在包含dict的JSONB字段的任何更改值之后,History对象不知道已删除的值。 此问题也与JSON字段相关。

有谁知道这是什么问题?

1 个答案:

答案 0 :(得分:1)

请在sqlalchemy

中结帐mutation tracking

您可以尝试将value字段声明为mutableDict

from sqlalchemy.ext.mutable import MutableDict
from sqlalchemy.dialects.postgresql import JSONB

value = db.Column(MutableDict.as_mutable(JSONB)

它只能支持1级密钥。因此,如果您已更改嵌套,则需要指定它已更改。

value.changed()