Python psycopg2+;存储过程&x2B;复合型
我在PostgreSQL中有一个存储过程,它采用了一个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
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')