У меня есть хранимая процедура в PostgreSQL, которая возвращает refcursor (его имя может быть передано в качестве аргумента):
-- Example stored procedure....
CREATE OR REPLACE FUNCTION example_stored_procedure(ref refcursor, gid_number integer) RETURNS refcursor AS $$
DECLARE
ref refcursor;
BEGIN
OPEN $1 for SELECT * FROM lucca_routes where gid = gid_number;
RETURN $1;
END;
$$ LANGUAGE plpgsql;
Затем я могу получить набор результатов из консоли postgres без проблем в этомway:
BEGIN;
select example_stored_procedure('customcursor', 1);
FETCH ALL IN "customcursor";
COMMIT;
Но мне нужно получить набор результатов из приложения Django (используя его соединение с postgreSQL).Согласно this , я пытался:
from django.db import connections
from rest_framework.response import Response
from rest_framework.decorators import api_view
@api_view(['GET'])
def testing_procedure(request):
connection = connections['default']
with connection.cursor() as cursor:
cursor.execute("BEGIN")
cursor.callproc("example_stored_procedure", ['customcursor', 1])
# "steal" the cursor - ERROR HERE!
cursor2 = connection.cursor('customcursor')
# fetch here the data from cursor2...
return Response(result)
Когда я пытаюсь "украсть" новый курсор (создание cursor2), возвращенный callproc (), у меня появляется ошибка:
TypeError: курсор () принимает 1 позиционный аргумент, но 2 были даны
Что я делаю неправильно?Как я могу получить данные из refcursor, возвращенного callproc ()?
Я использую psycopg2 2.7.5