sql - Sqlalchemy 使用 json_set 更新特定的 JSON 字段
问题描述
我打算使用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 形成正确的字段 from 'field_name'
to field_name
?
解决方案
您应该将带有模型名称的第一个参数传递给函数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()
推荐阅读
- reactjs - 哪些 React Hooks 可以匿名定义?
- python - 如何在 django 中编写子查询
- javascript - 为什么 react 不触发组件更新?
- android - 我的 react-native 应用程序未启动(启动 2 秒并关闭)
- c# - 我应该如何在可以处理表单提交的 .net Core Razor 页面应用程序上实现可重用组件?
- python - Python - 如何修复 CWE-117:日志的不正确输出中和
- c# - 请给出派生自 ScrollableControl 并实现 IContainerControl 的类的基本示例
- fortran - 将派生类型作为参数的函数作为 Fortran 中的参数传递
- java - 如何使用 BufferedReader 获取整数
- android - 使用 Android UI Automator 在辅助显示器上测试内容