Преобразование запроса PostgreSQL ARRAY_AGG в код Pandas DataFrame - PullRequest
1 голос
/ 03 августа 2020

Это запрос PostgreSQL, и я хочу, чтобы он записывал его с использованием Pandas кадра данных.

SELECT
    A.id,
    ARRAY_AGG(STRUCT(
        B.b_id,
        C.c_id,
        C.code,
        c.desc
    )) AS conditions
FROM A JOIN B ON A.id = B.id 
JOIN C ON B.b_id = C.c_id

Результат будет выглядеть следующим образом при преобразовании в формат JSON с использованием df.to_json(r'output.json', orient='records')

[
    "id": 123
    "conditions": [
        {
            "b_id": 23,
            "c_id": 23,
            "code": "some secret",
            "desc": "blah blah"
        },
        {
            "b_id": 24,
            "c_id": 24,
            "code": "secret code",
            "desc": "this is description"
        }
    ]
]

Это мой код на данный момент

import pandas as pd

Adf = pd.DataFrame({'id': [123]})
Bdf = pd.DataFrame({'id': [123, 123], 'b_id': [23, 24]})
Cdf = pd.DataFrame({'c_id': [23, 24], 'code': ['some secret', 'secret code'], 'desc': ['blah blah', 'this is description']})

df = Adf.merge(Bdf, left_on='id', right_on='id', how='inner')

df = df.merge(Cdf, left_on='b_id', right_on='c_id', how='inner')

print(df)

Что дает вывод -

    id  b_id  c_id         code                 desc
0  123    23    23  some secret            blah blah
1  123    24    24  secret code  this is description

Я не знаю, как выполнить ARRAY_AGG.

1 Ответ

0 голосов
/ 03 августа 2020

Если вы хотите использовать его в структуре DataFrame, вы должны растворить ARRAY_AGG, потому что DataFrame не поддерживает эту структуру.

SELECT
    A.id,
    B.b_id,
    C.c_id,
    C.code,
    C.desc
FROM A JOIN B ON A.id = B.id 
JOIN C ON B.b_id = C.c_id

И затем вы можете выполнить команду Pandas.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...