You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RobotFramework执行SQL报IndexError: list index out of range求助

RobotFramework插入PostgreSQL数据时出现IndexError: list index out of range的原因及解决方法

问题场景

运行RobotFramework脚本向PostgreSQL插入数据时,生成的SQL语句如下:

INSERT INTO my_table(
    claim_no,
    patient_name,
    tpa,
    state,
    patient_id,
    national_id,
    claim_date,
    process_date,
    cheif_complaints,
    significant_signs,
    uuid
)
VALUES(
    'xxx',
    'xx xx xx xx',
    'xx xx',
    'CONFIRMED',
    '1035188',
    2294751132,
    TO_DATE('13/12/2023', 'DD/MM/YYYY'),
    now(),
    'xx xxx xx  F/U - GRBS 250 Mg %',
    'CHEST- CLEAR  HEART --S1-S2-0  ',
    '1cf4ad85-906b-4721-ab2d-95e26ed42778'
);

执行时触发错误:IndexError: list index out of range

原因分析

这个错误的核心原因是RobotFramework的数据库操作库(如DatabaseLibrary)会将SQL语句中的%符号识别为参数占位符(类似Python字符串格式化中的%s)。当你直接拼接的SQL里包含%时,库会默认认为你需要传入对应的参数值,但你并没有提供匹配的参数列表,导致库在尝试匹配占位符时找不到对应的值,从而抛出索引越界的错误。

解决方法

方法1:转义SQL中的%符号

在PostgreSQL中,要表示字面意义的%,需要用%%进行转义。修改cheif_complaints字段的值:

'xx xxx xx  F/U - GRBS 250 Mg %%'

修改后的完整SQL语句即可正常执行,此时库不会把%%当成参数占位符。

方法2:使用参数化查询(推荐)

避免直接拼接SQL字符串,改用参数化查询方式,让数据库库自动处理特殊字符的转义,同时还能防止SQL注入风险。示例RobotFramework代码如下:

*** Test Cases ***
Insert Patient Claim Data
    # 定义带占位符的SQL模板(使用?作为占位符,部分库可能用%s,需根据实际库调整)
    ${insert_sql}=    Set Variable    INSERT INTO my_table(claim_no, patient_name, tpa, state, patient_id, national_id, claim_date, process_date, cheif_complaints, significant_signs, uuid) VALUES(?, ?, ?, ?, ?, ?, TO_DATE(?, 'DD/MM/YYYY'), now(), ?, ?, ?)
    # 准备参数列表,直接传入带%的原始字符串
    ${params}=    Create List    xxx    xx xx xx xx    xx xx    CONFIRMED    1035188    2294751132    13/12/2023    xx xxx xx  F/U - GRBS 250 Mg %    CHEST- CLEAR  HEART --S1-S2-0      1cf4ad85-906b-4721-ab2d-95e26ed42778
    # 执行参数化SQL
    Execute Sql    ${insert_sql}    ${params}

内容的提问来源于stack exchange,提问作者art

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 18:52:28