python - 如何在ORM查询中使用路径编写mysql json_contains函数的第一个参数
问题描述
我在sqlalchemy
原始 sql 中写一个查询是
select * from my_table where JSON_CONTAINS( info->'$.user[*].id', '["bob", "tom"]','$');
现在不知道怎么写成ORM
格式
我试过这个
session.query(my_table).filter(func.json_contains(my_table.info["user"]["*"]["id"],'["bob", "tom"]','$'))
但没有工作
解决方案
您还需要在->
此处翻译运算符。从关于 JSON 搜索功能的 MySQL 参考文档:
运算符在与两个参数一起使用时充当函数的
->
别名,JSON_EXTRACT()
左侧是列标识符,右侧是根据 JSON 文档(列值)评估的 JSON 路径。
SQLAlchemy 1.3 及更高JSON_EXTRACT()
版本通过使用item subscription原生支持,所以columnname[expression]
. 您需要在此处将右侧的整个表达式作为单个字符串传递:
session.query(my_table).filter(
func.json_contains(
my_table.info["$user.*.id"],
'["bob", "tom"]',
'$'
)
)
然后将my_table.info["$user.*.id"]
Python 表达式编译为JSON_EXTRACT(info, "$user.*.id")
,相当于info->"$user.*.id"
.
推荐阅读
- javascript - 在 UIManager 中找不到 RNCSafeAreaView
- node.js - 如何在 mongoose 模式的项目数组中定义对象
- javascript - 如何缩放忽略所有内容的元素?
- swift - Getting Invalid Firebase Data error when trying to save to Firebase using Swift
- ios - 获取列表中的核心数据实体
- c# - 如何获取数组的json值
- c# - NLog - 结合保留天数和大小限制
- python - PySpark Groupby 和基于 Regex 的过滤器
- mysql - 在 PostgreSQL 中将“0000-00-00 00:00:00”替换为 NULL
- xpath - 嵌套 XPath 查询