2016-03-30 1 views
1

So hatte ich eine SQLAlchemy Tabelle mit einer JSON Spalte:In SQLAlchemy, wie funktioniert die Methode zum Aktualisieren von Diktaten mit dem ORM?

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

Und ich versuchte, die Säule mit der dict#update Methode zur Aktualisierung wie folgt:

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

jedoch, dass nicht funktionierte. Edit: Was ich meinte ist, die Updates wurden nicht in der Datenbank gespeichert.

Was funktioniert hat, war dies:

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

ich es etwas vermuten, hat mit „Unveränderlichkeit“ oder der ORM nur Hinweise Änderungen auf direkte Zuordnung oder etwas zu tun. Weiß jemand genau warum?

Antwort

3

Ja. Standardmäßig verfolgt SQLAlchemy keine Änderungen innerhalbdict Attribute. Um Änderungen zu verfolgen, können Sie die mutable Erweiterung verwenden:

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