From: | Rory Campbell-Lange <rory(at)campbell-lange(dot)net> |
---|---|
To: | Dmytro Starosud <d(dot)starosud(at)gmail(dot)com> |
Cc: | psycopg(at)postgresql(dot)org |
Subject: | Re: Parse record type into tuple |
Date: | 2017-09-05 22:33:47 |
Message-ID: | 20170905223347.i7sdm2xd7cjgp5oq@campbell-lange.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | psycopg |
Hi Dmytro
I misread your question; sorry. You clearly know the difference betwreen
a row/record and array.
The only approach I can think of is
=> select * from (values (1,2)) x (a,b);
a | b
---+---
1 | 2
or this works suprisingly well
=> create type e_test as (x integer, y integer);
CREATE TYPE
=> select (1, 2)::e_test;
row
-------
(1,2)
(1 row)
=> select to_json((1, 2)::e_test);
to_json
---------------
{"x":1,"y":2}
(1 row)
In [54]: c.execute('select to_json((1, 2)::e_test);')
In [55]: r = c.fetchone()
In [56]: r
Out[56]: Record(to_json={u'y': 2, u'x': 1})
On 05/09/17, Rory Campbell-Lange (rory(at)campbell-lange(dot)net) wrote:
> Hi Dmytro
>
> I think your query is using row query syntax, the same as
>
> => select row(1,2);
> row
> -------
> (1,2)
>
> in Postgres (which is not a common thing to want to do).
> https://www.postgresql.org/docs/9.6/static/sql-expressions.html#SQL-SYNTAX-ROW-CONSTRUCTORS
>
> If you want to select an array from Postgres, you need different syntax,
> e.g.
>
> => select array[1,2];
> array
> -------
> {1,2}
> (1 row)
>
> https://www.postgresql.org/docs/9.6/static/arrays.htmlttps://www.postgresql.org/docs/9.2/static/sql-expressions.html#SQL-SYNTAX-ROW-CONSTRUCTORS
>
> In psycopg2:
>
> In [1]: import psycopg2
> In [2]: conn = psycopg2.connect(dbname='template1', user='dbuser', password='xxx')
> In [3]: c = conn.cursor()
> In [5]: c.execute("select array[1,2] as ar")
> In [6]: c.fetchone()
> Out[6]: ([1, 2],)
>
> In [7]: from psycopg2.extras import NamedTupleCursor
> In [8]: c = conn.cursor(cursor_factory=NamedTupleCursor)
> In [9]: c.execute("select array[1,2] as ar")
> In [10]: c.fetchone()
> Out[10]: Record(ar=[1, 2])
>
>
> I put in the NamedTupleCursor example in there as I find it invaluable.
>
> Kind regards
> Rory
>
>
>
> On 05/09/17, Dmytro Starosud (d(dot)starosud(at)gmail(dot)com) wrote:
> > I do following interactions with DB:
> >
> > In [48]: conn = psycopg2.connect("dbname=... user=... password=...")
> > In [49]: cur = conn.cursor()
> > In [50]: cur.execute("select (1, 2)")
> > In [51]: cur.fetchone()
> > Out[51]: ('(1,2)',)
> >
> > Is it possible to get that tuple parsed into python tuple in the same way
> > array works?
> >
> > In [55]: cur.execute("select array[1, 2]")
> > In [56]: cur.fetchone()
> > Out[56]: ([1, 2],)
> >
> > Looks like that can be done if I register composite type for that tuple.
> > But I would like it to work with any tuple.
> >
> > Please assist.
> >
> > Thanks in advance!
> > Dmytro
>
>
> --
> Sent via psycopg mailing list (psycopg(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/psycopg
From | Date | Subject | |
---|---|---|---|
Next Message | Daniele Varrazzo | 2017-09-06 11:10:06 | Re: Parse record type into tuple |
Previous Message | Rory Campbell-Lange | 2017-09-05 21:39:10 | Re: Parse record type into tuple |