psycopg2 +存储过程+复合类型

时间:2011-11-21 06:47:37

标签: python postgresql stored-procedures psycopg2

我在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 个答案:

答案 0 :(得分:3)

您可以在元组中传递namephoneaddress,最后使用明确的强制转换来更好地消除歧义:

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

您也可以使用namedtuple:它的调整方式相同。

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