2016-03-30 17 views
1

Bu yüzden bir JSON sütununu içeren bir SQLAlchemy Tablo vardı:SQLAlchemy'de, dict update yöntemi ORM ile nasıl etkileşimde bulunur?

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

Ve şöyle dict#update yöntemi ile sütun güncellemek için çalıştı:

def foo(my_object, new_params): 
    my_object.my_json_column.update(new_params) 
    db.session.commit() 

Ancak işe yaramadı. Düzenleme: Demek istediğim, güncellemeler veritabanına devam etmiyordu. Ben "değişmezlik" ya da ORM doğrudan atama, ya da bir şey sadece bildirimler değişiklikler ile ilgili bir şey vardır şüpheli

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() 

: çalışma yaptı Ne

bu oldu. Tam olarak nedenini bilen var mı?

cevap

3

Evet. Varsayılan olarak SQLAlchemy,dict öznitelikleri içindeki değişikliklerini izlemez. Değişiklikleri izlemesini sağlamak için,

class MyTable(db.Model): 
    ... 
    my_json_column = db.Column(MutableDict.as_mutable(JSON))