我正在使用MySql+Python。我有一个带有json字段的MySql表。用户可以在 json 对象中存储任意数量的字段。
例如:
{id:12, name:"a", age: 23}
OR
{id:5, distance: 23, distance_unit: "mile"}
以下查询效果很好:
SELECT JSON_EXTRACT(name, "$.id") as name
FROM table
WHERE JSON_EXTRACT(name, "$.id") > 3
但是,只有当我事先知道字段名称时,它才会起作用。有没有办法搜索任意字段?像这样:
def search(json_field)
magic!!!
if (json_field==exist)
return json_value
else:
return "not found"
我不想将所有结果加载到内存中,然后使用 Python 进行搜索,因为它效率不高。
也许您希望按值搜索 JSON 数据,而不必知道其键(即字段(?
如果是这样,您可以尝试JSON_SEARCH
函数。如果找到匹配的值,则返回键名(字段名称(,如果没有,则返回NULL
。函数的第二个参数确定是要对所有 JSON 字段执行搜索,还是以第一个匹配项结束搜索。
例:
CREATE TABLE temp1(mydata json);
INSERT INTO temp1 values('{"id":"5", "distance":"23", "age":"23", "distance_unit":"mile"}');
SELECT json_search(mydata, "one", "5") AS success FROM temp1;
-- Returns "$.id"
SELECT json_search(mydata, "all", "23") AS success FROM temp1;
-- Returns ["$.age", "$.distance"]
SELECT json_search(mydata, "all", "99") AS success FROM temp1;
-- Returns NULL
演示
然后,您可以在 Python 代码中检查从查询返回的值以获取None
?