From: | Vladimir Ryabtsev <greatvovan(at)gmail(dot)com> |
---|---|
To: | psycopg(at)postgresql(dot)org |
Subject: | Using composite types in psycopg3 |
Date: | 2020-11-10 21:59:31 |
Message-ID: | CAMqTPqm7H4yVk0qGA8=TyTtVsNX88bo8x1BJkHc6vrOVYyW=RQ@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | 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(at)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
From | Date | Subject | |
---|---|---|---|
Next Message | Daniele Varrazzo | 2020-11-11 00:24:11 | Re: Using composite types in psycopg3 |
Previous Message | Rory Campbell-Lange | 2020-11-10 21:24:11 | Re: psycopg3 and adaptation choices |