烧瓶sqlalchemy。 commit不保存更改

时间:2018-05-23 13:52:44

标签: python sqlalchemy flask-sqlalchemy

我的提交不保存对数据库的任何更改:

# project/models.py

from project import db
from sqlalchemy.dialects.postgresql import JSON

class Customer(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    clientid = db.Column(db.String(64))
    ...
    contextjason = db.Column(JSON)
# project/__init__.py

from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
db = SQLAlchemy(app)

from project.models import Customer
custObj = Customer.query.filter(Customer.custid == custid).first()
print(custObj.contextjason)  # works fine
custObj.contextjason = { 'foo':'bar', 'so':'be it'}
db.session.commit()

提交不会对数据库进行任何更改。实际上,我不知道它在后台做了什么。

有人可以告诉我为什么没有数据库更新吗?

我可以告诉提交以某种方式记录它正在做什么(也许是SQL明智的)?

编辑:

使用SQLALCHEMY_ECHO = True

我得到了这个提交:

  

2018-05-23 16:42:17,102 INFO sqlalchemy.engine.base.Engine COMMIT

1 个答案:

答案 0 :(得分:2)

更新 JSON(B) 属性时,我认为您可能需要将其标记为已修改

from sqlalchemy.orm.attributes import flag_modified

custObj.contextjason = { 'foo':'bar', 'so':'be it'}
flag_modified(custObj, "contextjason")
db.session.commit()