Python psycopg2+;存储过程&x2B;复合型

Python psycopg2+;存储过程&x2B;复合型,python,postgresql,stored-procedures,psycopg2,Python,Postgresql,Stored Procedures,Psycopg2,我在PostgreSQL中有一个存储过程,它采用了一个t\u文档复合类型,定义如下: CREATE TYPE t_document AS ( title text, metadata text, data text ); 存储过程还接受其他参数,其签名如下: CREATE or REPLACE FUNCTION sp_insertItem ( name varchar(100) , phone varchar(100) , add

我在PostgreSQL中有一个存储过程,它采用了一个
t\u文档
复合类型,定义如下:

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\u document
。那么,如何从psycopg2调用一个需要复合类型的存储过程呢

您可以在元组中传递
名称
电话
地址
,最终通过显式转换来更好地消除歧义:

cur.execute("sp_insertItem(%s, %s, %s, %s::t_document)",
    ['Name', 'Phone', 'Address', ('Title', 'Metadata', 'Data')])
您还可以使用namedtuple:它以相同的方式进行调整

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