例如我有一个模型:
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字段相关。
有谁知道这是什么问题?
答案 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()