psycopg2 + хранимая процедура + составной тип - PullRequest
1 голос
/ 21 ноября 2011

У меня есть хранимая процедура в 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, которая ожидает составной тип?

1 Ответ

3 голосов
/ 20 декабря 2011

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

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

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

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