我有一个带有json列“ contact_info”的表,该列的结构通常是这样的:
{
"telephones":[
{"telephone":54435345,"type":"landline"},
{"telephone":694823747,"type":"mobile"},
]
}
Run Code Online (Sandbox Code Playgroud)
我想查找具有特定电话的所有行,我在sqlalchemy中的json数组周围发现的唯一东西是这样的:
Table.contact_info["telephones"][0]["telephone"].astext.ilike(mask)
Run Code Online (Sandbox Code Playgroud)
但这仅搜索0th元素。
目前,我的愚蠢解决方案是将“电话”转换为文本并执行ilike,但这当然是错误的...
Table._contact_info["telephones"].astext.ilike(mask)
Run Code Online (Sandbox Code Playgroud)
在带有 JSONB 的 PostgreSQL 中,您可以使用包含检查:
dict = {"telephones": [{"telephone": "54435345"}]}
user = cls.query.filter(your_table.contact_info.contains(dict)).first()
Run Code Online (Sandbox Code Playgroud)
在 MySQL 中,可能可以使用func. json_contains:
Run Code Online (Sandbox Code Playgroud)from sqlalchemy import func # JSON_CONTAINS returns 0 or 1, not found or found. Not sure if MySQL # likes integer values in WHERE, added == 1 just to be safe session.query(Story).filter(func.json_contains(Story.section_ids, X) == 1).all()
(你需要适应并尝试一下,当然是 MySQL 的方式,但也可能是 PostgreSQL 的方式)
| 归档时间: |
|
| 查看次数: |
2079 次 |
| 最近记录: |