Как получить возвращенный объект запроса функции PostgreSql в Python? - PullRequest
0 голосов
/ 16 сентября 2018

С помощью функции pgsql SelRec(integer), как определено ниже:

-- select record
CREATE OR REPLACE FUNCTION SelRec(_sno integer)
  RETURNS SETOF app_for_leave AS
$BODY$
    BEGIN
    RETURN QUERY
        SELECT * FROM "app_for_leave" WHERE "sno"=_sno;
    END
$BODY$
LANGUAGE 'plpgsql' VOLATILE;

Я попытался вызвать эту функцию внутри своего кода Python и ожидал, что возвращаемый результат будет в виде объекта запроса, который, кроме того, мог бы получить индивидуальное значение внутриобъект запроса.

import psycopg2

connection_string = 'postgresql://postgres:111111@localhost:5432/myDB'

conn = psycopg2.connect(connection_string)
cursor = conn.cursor()

obj = cursor.execute("select * from SelRec(1)");

conn.commit()

print obj # None

Тем не менее, результат равен None, как будто данные не сохраняются, но он существует, как показано ниже:

 sno | eid | ename |     sd     |     ed     | sid | status 
-----+-----+-------+------------+------------+-----+--------
   1 | 101 |       | 2013-04-04 | 2013-04-04 |   2 | f

Мне нужна obj возвращает объект запроса, который я бы далее назвал DataSet = obj.first(), и DataSet.status, ect для каждого отдельного значения.

Есть какие-нибудь предложения, как мне этого добиться?Спасибо.

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Я думаю, вы должны попробовать запрос, приведенный ниже. Так же вы хотите вернуть множество строк.

select * from SelRec(1) as result (sno int, eid int, ename varchar, sd data_type, ed data_type, sid int, status boolean)
0 голосов
/ 16 сентября 2018

Я думаю, что это может быть ожидаемое поведение.

Из документов http://initd.org/psycopg/docs/cursor.html#cursor.execute

Метод возвращает None.Если запрос был выполнен, возвращаемые значения можно получить с помощью методов fetch * ().

Попробуйте что-то вроде:

print(dir(obj), type(obj))
print(cursor.fetchall())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...