Using composite types in psycopg3

Поиск
Список
Период
Сортировка
От Vladimir Ryabtsev
Тема Using composite types in psycopg3
Дата
Msg-id CAMqTPqm7H4yVk0qGA8=TyTtVsNX88bo8x1BJkHc6vrOVYyW=RQ@mail.gmail.com
обсуждение исходный текст
Ответы Re: Using composite types in psycopg3  (Daniele Varrazzo <daniele.varrazzo@gmail.com>)
Список psycopg
Hello,

I have tried psycopg3 very briefly and I have a question.

I have a couple of use cases in systems I currently work with
that prevented (or seriously limited) usage of psycopg2, so
I had to use other drivers. This generally relates to accessing
composite types that you can construct on-the-fly in SQL queries.
Consider the following example:

'''
import psycopg2

def get_query(fpath):
    with open(fpath, 'rt') as f:
        return f.read()

def main():
    conn = psycopg2.connect('postgres://user:password@host/db')
    cur = conn.cursor()
    cur.execute(get_query('query.sql'))
    result = cur.fetchone()[0]
    print(type(result), result)
    cur.close()
    conn.close()

if __name__ == '__main__':
    main()
'''

Where query.sql is:

'''
with test as (
    select 1 as id, 'one' val
    union all
    select 1, 'one more'
    union all
    select 2, 'two'
)
select array(
    select (id, array_agg(val))
    from test
    group by id
)
'''

psycopg2 returns the 'result' as a basic string, while
in asyncpg and py-postgresql I have structured data
(roughly 'List[Tuple[int, List[str]]]').

I tried the same in psycopg3 and it is little bit better, but
not entirely: it shows the outer list, the tuples inside it,
but the innermost list is still represented as a basic string:
'{one,"one more"}'.

Is it something you are still working on? Any workarounds?

Vladimir

В списке psycopg по дате отправления:

Предыдущее
От: Rory Campbell-Lange
Дата:
Сообщение: Re: psycopg3 and adaptation choices
Следующее
От: Daniele Varrazzo
Дата:
Сообщение: Re: Using composite types in psycopg3