一尘不染

JSON字段的更新不会持久保存到数据库

json

我们有一个带有JSON字段的模型,其中插入了用户标志。插入确实可以按预期工作,但是删除某些标志时,它们保留在字段中,并且更改不会持久保存到数据库中。

我们的模型中有以下方法:

def del_flag(self, key):
    if self.user_flags is None or not key in self.user_flags:
        return False
    else:
        del self.user_flags[key]
        db.session.commit()        
        return True

databasse是postgres,我们对字段类型使用SQLalchemy JSON字段方言。有什么建议吗?


阅读 287

收藏
2020-07-27

共1个答案

一尘不染

如果您使用的是Postgres <9.4,则无法直接更新JSON字段。您需要 flag_modified 函数将更改报告给SQLAlchemy:

from sqlalchemy.orm.attributes import flag_modified
model.data['key'] = 'New value'
flag_modified(model, "data")
session.add(model)
session.commit()
2020-07-27