Получение PostgreSQL рефлектор в Pyhton 3 - PullRequest
0 голосов
/ 21 марта 2020

Я пытаюсь получить данные из postgres рефкурсора в python, у меня есть следующий код:

Postgres Функция

create or replace FUNCTION get_users(p_cursor REFCURSOR) returns REFCURSOR
   AS $procedure$
BEGIN
   open p_cursor FOR
   select * from users;

   RETURN p_cursor;
END; $procedure$
LANGUAGE plpgsql;

Python часть

@classmethod
    def load_all(cls):
        with ConnectionFromPool() as connection:
            with connection.cursor() as cursor:
                cursor.execute('select * from get_users(%s)', ('cursor',))
                user_data = cursor.fetchall()
                return user_data

Запрос работает, но я не могу понять, почему я получаю [('cursor',)] в результате.

Может кто-нибудь помочь мне с этим? Я действительно не мог найти какой-либо материал, который помог бы мне решить эту проблему ...

РЕДАКТИРОВАТЬ: Если я использую RETURNS TABLE на postgres, это работает, но мне нужно быть в состоянии создать запрос со строками и сравнениями переменных.

1 Ответ

0 голосов
/ 21 марта 2020

Наверное, я прибил его, не знаю, является ли это лучшим решением, но оно работает!

Postgres:

create or replace function get_users(refcursor) returns refcursor
   AS $$
declare
    stmt text;
begin
    stmt = 'select id, email from users';
    open $1 for execute stmt;
    return $1;

END; $$
LANGUAGE plpgsql;

Python:

@classmethod
    def load_all(cls):
        with ConnectionFromPool() as connection:
            with connection.cursor() as cursor:
                cursor.callproc("all_users", ('test',))
                cur2 = connection.cursor('test')
                user_data = cur2.fetchall()
                return user_data
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...