我在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中需要复合类型的存储过程呢?
答案 0 :(得分: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')