我有一个带有json列的表" contact_info",此列的结构通常是这样的:
{
"telephones":[
{"telephone":54435345,"type":"landline"},
{"telephone":694823747,"type":"mobile"},
]
}
我想查找具有特定电话的所有行, 我在sqlalchemy中找到的json数组唯一的东西是这样的:
Table.contact_info["telephones"][0]["telephone"].astext.ilike(mask)
但是这只搜索0
元素。
目前我的愚蠢解决方案是转换"电话"进入文本并执行ilike
,但这当然是错误的......
Table._contact_info["telephones"].astext.ilike(mask)
答案 0 :(得分:0)
这似乎取决于数据库。请尝试以下其中一项
In MongoDB(是的,它不是sql,但对于JSON来说,它简单直观)
db.contact_info.find({"telephones.telephone": {"$in": [54435345]}})
dict = {"telephones": {"telephone": "54435345"}}
user = cls.query.filter(your_table.contact_info.contains(dict)).first()
In MySQL可以使用func
。json_contains
:
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)