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
相关产品推荐
相关产品推荐

