我打算使用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
形成正确的字段
发布于 2020-12-22 23:36:49
您应该将第一个名为模型的参数传递给func.json_set
函数
self.db.query(TestModel).filter(TestModel.test_id == self._test_id).update(
{field_name: func.json_set(
TestModel.field_name,
"$." + key,
formatted_val)},
synchronize_session='fetch'
)
self.db.commit()
https://stackoverflow.com/questions/56219291
复制相似问题