在SQLAlchemy中,dict更新方法如何与ORM交互?

coz*_*zos 5 python orm json sqlalchemy

所以我有一个带有JSON列的SQLAlchemy表:

from sqlalchemy.dialects.postgresql import JSON
class MyTable(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    my_json_column = db.Column(JSON)
Run Code Online (Sandbox Code Playgroud)

我尝试使用如下dict#update方法更新列:

def foo(my_object, new_params):
    my_object.my_json_column.update(new_params)
    db.session.commit()
Run Code Online (Sandbox Code Playgroud)

但是,这没有用.编辑:我的意思是,更新没有被持久化到数据库.

做了什么工作,是这样的:

def foo(my_object, new_params):
    temp_params = my_object.my_json_column.copy()
    temp_params.update(new_params)
    my_object.my_json_column = new_params
    db.session.commit()
Run Code Online (Sandbox Code Playgroud)

我怀疑它与"不变性"有关,或者ORM只注意到直接赋值的变化,或者其他东西.有谁知道为什么?

uni*_*rio 9

是.默认情况下,SQLAlchemy不会跟踪属性内的 更改dict.要使其跟踪更改,您可以使用mutable扩展名:

class MyTable(db.Model):
    ...
    my_json_column = db.Column(MutableDict.as_mutable(JSON))
Run Code Online (Sandbox Code Playgroud)