从python sqlalchemy调用Hana存储过程时出错

从python sqlalchemy调用Hana存储过程时出错,python,sqlalchemy,hana,Python,Sqlalchemy,Hana,当我使用sqlalchemy库从python调用具有表类型输入和varchar out参数的存储过程时,我遇到了一个错误 从python sqlalchemy.exc.DatabaseError调用过程时出错:pyhdb.exceptions.DatabaseError无效参数:输入参数不足以作为表参数: 参数一是表类型in,参数二是varchar out 我正在添加我正在尝试使用的代码段 engine = create_engine("hana+pyhdb://{username}:{pass

当我使用sqlalchemy库从python调用具有表类型输入和varchar out参数的存储过程时,我遇到了一个错误

从python sqlalchemy.exc.DatabaseError调用过程时出错:pyhdb.exceptions.DatabaseError无效参数:输入参数不足以作为表参数:

参数一是表类型in,参数二是varchar out

我正在添加我正在尝试使用的代码段

engine = create_engine("hana+pyhdb://{username}:{password}@{host}:{port}".format(username='username', password='password', host='hostname', port='30015'))

output="
输入法[{RULE_ID:1,RULE_NAME:null,SO_SSA:1074,PO_编号:null,代码:DDD,ROUTE_代码:,操作:null,SHIP_-TO:IND,SHIP_-TO_区域:MX,SHIP_-TO-u客户_ID:null,BILL_-TO-u客户_-ID:null,END_-TO-u客户_-TO-u-u-u-CUSTOMER_-ID:null,SLCA:AKP123,HOLD_-TO-u名称:期货审批持有,发货偏好:null,EAD:null,客户请求类型:null,CRD:null,当前承诺日期:null承诺交付日期:空,操作日期:空,操作日期:空,操作日期:空,保留:空,流动状态:空,挑选结果:空,是否在OTM:空,业务单位:空,收入标志:空,操作类别:空,操作所有者:空,销售收入:空,纸箱:空,发票资格事件:空,销售渠道:空,创建人:新,创建日期:2020-02-11 10:24PM,最后更新人:新,最后更新ATE_日期:2020-03-04 10:39下午,FDA_标志:无效,POE_标志:无效,合并_标志:无效,开始日期:2019-01-02,结束日期:2020-01-02,有效日期:T}

test=engine.execute('call SCHEMA.PROC(?,?)',(input,output))

我从UI接收JSON字符串形式的输入。在HANA SP中,输入的类型为表类型。我不确定如何将输入转换为表类型。错误消息已经指出:过程的预期参数是表,但调用过程时未提供此参数

这里要知道的重要一点是,参数定义的“表类型”并不意味着客户端程序可以以某种方式创建一组记录,将其称为表并将其传递给参数

相反,可以将实际的SAP HANA表或SQLScript表变量传递给表类型参数

为了避免此限制,客户端程序有不同的选项:

创建一个临时表,用应传递到过程中的记录填充该表,并使用该表的名称调用该过程。 使用匿名SQLScript块,其中记录首先收集到一个表变量中,然后将该表变量传递给过程。 可能看起来像这样:

 DO BEGIN
      tab_var = select ‘some data’ as COL_1, 1234 as COL_2 from dummy union all 
                select ‘some other data’ as COL_1, 4711  as COL_2 from dummy;

     call my_procedure (tab_param => :tab_var );
 END;