首页 > 解决方案 > PostgreSQL 从 JSON 列返回一个 JSON,其中只有键在 python 列表中的键/值

问题描述

假设我有一些我想在 Python 脚本中选择的 PostgreSQL 表('table_1')。该表有一列包含 JSON 数据(称为“json_data”),如下所示,例如:

{'4369': 2, '8465': 1, '12561': 1, '12562': 1}

现在我在 Python 中有一个列表,如下所示:

[4369, 8465, 12561, 16657]

我的目标是从 postgresql 表中返回一个 JSON/dict,该表仅包含键/值对,其中键位于每行的 Python 列表中。对于上述情况,我希望 JSON 返回为:

{'4369': 2, '8465': 1, '12561': 1}

我的猜测是它必须看起来有点像这样,但我不知道'......'必须去什么

SELECT json_data ->> ... IN 'python_list'
FROM table_1

标签: pythonjsonpostgresqljsonb

解决方案


示例,仅使用普通 SQL 并使用 CTE 来模拟您的表:

WITH i AS (
    SELECT  '{"4369": 2, "8465": 1, "12561": 1, "12562": 1}'::json AS json_data
)
SELECT  *
FROM    i, -- your table name
        json_each(json_data)
WHERE   key::int =any(ARRAY[4369, 8465, 12561, 16657]);

函数 json_each (或使用 jsonb 数据类型时的 jsonb_each )可以解决问题。

我希望你能把它变成python中有用的东西。


推荐阅读