Re: Trying to understand why same SQL returns different results. - Mailing list psycopg
From | Adrian Klaver |
---|---|
Subject | Re: Trying to understand why same SQL returns different results. |
Date | |
Msg-id | [email protected] Whole thread Raw |
In response to | Trying to understand why same SQL returns different results. (Neil Tiffin <[email protected]>) |
Responses | Re: Trying to understand why same SQL returns different results. |
List | psycopg |
On 11/20/2012 12:33 PM, Neil Tiffin wrote: > When I run the SQL directly from psycopg and from a plpgsql function each produces different results. One returns twocolumns and the other only returns one column. > > For example. > > def sql_test1(): > cur = CONN.cursor() > cur.execute(""" > CREATE OR REPLACE FUNCTION get_some_text() > RETURNS RECORD AS $$ > DECLARE > result RECORD; > BEGIN > SELECT 'some text' AS colume1, 'some more text' as column2 INTO result; > RETURN result; > END; > $$ LANGUAGE plpgsql;""") > > print('test 1') > cur.execute("""SELECT 'some text' AS colume1, 'some more text' as column2;""") > print (cur.description) > print (cur.fetchone()) > > print ('test 2') > cur.execute("""SELECT get_some_text();""") > print (cur.description) > print (cur.fetchone()) > > CONN.commit() > cur.close() > > Output: > test 1 > (Column(name='colume1', type_code=705, display_size=None, internal_size=-2, precision=None, scale=None, null_ok=None),Column(name='column2', type_code=705, display_size=None, internal_size=-2, precision=None, scale=None, null_ok=None)) > ('some text', 'some more text') > > test 2 > (Column(name='get_some_text', type_code=2249, display_size=None, internal_size=-1, precision=None, scale=None, null_ok=None),) > ('("some text","some more text")',) > > Is this the expected results and I am misunderstanding something? Or is this a bug? Expected. In the first case you are returning two columns. In the second a single record. Running in psql explains it better: First case: test=> SELECT 'some text' AS colume1, 'some more text' as column2 ; colume1 | column2 -----------+---------------- some text | some more text (1 row) Second case: test=> SELECT get_some_text(); get_some_text -------------------------------- ("some text","some more text") (1 row) > > Neil > > Python 3.3.0 > Mac OS X 10.7.5, Postgresql 9.1.2, psycopg git clone, > -- Adrian Klaver [email protected]