今天遇到一灵异事件,ORM更新操作,一字段始终不生效,最后发现问题原因是postgres的jsonb导致的
表结构:
CREATE TABLE XX(value jsonb default '{}',...)
ORM:
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.dialects.postgresql import JSONB
db = SQLAlchemy()
class XX(db.Model):
__tablename__ = 'xx'
value = db.Column(JSONB, default={}, doc='xxx')
...
常规的更新写法,对他不生效,需要如下操作才能更新成功:
from sqlalchemy.orm.attributes import flag_modified
obj = XX.query.first()
obj.value = new_value_dict
flag_modified(obj, "value") # !!!! 不加就更新不成功
db.session.add(xx)
db.session.commit()