psycopg2 + хранимая процедура + составной тип

1

У меня есть хранимая процедура в PostgreSQL, которая принимает составной тип t_document определенный следующим образом:

CREATE TYPE t_document AS (
    title    text,
    metadata text,
    data     text
);

Хранимая процедура также принимает и другие аргументы, с такой сигнатурой, как:

CREATE or REPLACE  FUNCTION sp_insertItem
(
    name varchar(100) ,
    phone varchar(100) ,
    address varchar(150) ,
    document t_document 
) 

Вызов этой хранимой процедуры из другой хранимой процедуры выглядит следующим образом:

sp_insertItem('Name','Phone', 'Address', row('Title', 'Metadata', 'Data'));

Я знаю, что могу вызывать процедуры с помощью cursor.callproc и давать необходимые аргументы. Однако я не знаю, как передавать сложные аргументы, такие как t_document. Итак, как мне вызвать хранимую процедуру из psycopg2, которая ожидает составной тип?

Теги:
stored-procedures
psycopg2

1 ответ

3
Лучший ответ

Вы можете передать name, phone и address в кортеже, в конце концов с явным приведением, чтобы лучше устранить проблему:

cur.execute("sp_insertItem(%s, %s, %s, %s::t_document)",
    ['Name', 'Phone', 'Address', ('Title', 'Metadata', 'Data')])

Вы также можете использовать namedtuple: он адаптирован таким же образом.

Document = namedtuple('Document', 'title metadata data')

Ещё вопросы

Сообщество Overcoder
Наверх
Меню