其他JSON的JSON列表中的一个JSON的JSON值

时间:2018-12-03 14:35:47

标签: python json postgresql sqlalchemy

在postgres上使用SQLalchemy时,我想知道一个JSON是否在另一个JSON中,应该在JOIN的ON子句中,所以类似:

SELECT json_1, ... FROM table_1
JOIN
SELECT json_2, ... FROM table_2
ON json_1['b'] IN json_2['b']

例如:

json_1 = {"a": ["123"], "b": ["456", "789"]}
json_2 = {"a": ["123"], "b": ["456"]}

所以我想知道json_2 ['b']是否在SQLAlchemy的json_1 ['b']中。 不确定IN是否可以在ON子句中使用,但可能包含一个或其他内容?

1 个答案:

答案 0 :(得分:1)

如果数据类型为jsonb,那么我认为PostgreSQL支持contains查询来查看一个JSON是否是另一个JSON的子集。这样,SQLAlchemy将支持执行这种类型的SELECT。请查看以下链接以获取更多详细信息:

我还要指出的是,如果PostgreSQL中的数据类型为json,那么您可能会很不走运,因为PostgreSQL似乎并不本地支持将这些对象相互比较。

除非如此,否则您可能会使用Python将JSON值转换为字符串并执行基于正则表达式的比较-但我担心这种方法会失败,因为在以下示例中,我想您会考虑使用{{ 1}}仍然是json_2的子集:

json_1

除非您 ,否则您可能在subgraph isomorphism problem的领土内。 networkx包含VF2 algorithm的实现,这可能有助于执行此比较-但这种方法可能很危险。