【发布时间】:2019-10-06 17:26:32
【问题描述】:
我打算使用 func 函数来更新 Sqlalchemy 中的特定 JSON 字段,但我遇到了一些问题,这是我更新字段的代码:
self.db.query(TestModel).filter(TestModel.test_id == self._test_id).update(
{field_name: func.json_set(
field_name,
"$." + key,
formatted_val)}
, synchronize_session='fetch'
)
self.db.commit()
我运行了上面的代码,得到了错误:
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) malformed JSON
所以,我去查看日志,发现 Sqlalchemy 形成了这样的 SQL 子句:
UPDATE test_model SET field_name=json_set('field_name', '$.keyname', 'value') WHERE test_model.test_id = 1;
问题是 Sqlalchemy 不应该使用 'field_name' 来指定字段它应该使用 field_name 来指定字段,我尝试在 sql 客户端中运行更正的 sql 子句:
UPDATE test_model SET field_name=json_set(field_name, '$.keyname', 'value') WHERE test_model.test_id = 1;
它可以找到
我只是想知道如何使 Sqlalchemy 形成从 'field_name' 到 field_name 的正确字段?
【问题讨论】:
标签: sql json sqlite sqlalchemy mysql-json