使用Python将Excel数据插入Oracle数据库时遇ORA-00926错误求助
解决ORA-00926: missing VALUES关键字错误
问题分析
你遇到的ORA-00926错误说明Oracle数据库接收到的INSERT语句存在语法问题,核心是SQL中缺少VALUES关键字,或者语句结构被意外破坏。结合你的代码场景,可能的诱因包括:SQL语句含隐藏字符、Excel行数据异常间接导致SQL执行出错,或是绑定变量传递时的隐性问题。
排查与解决步骤
打印SQL语句确认完整性
在执行cur.execute()前添加打印逻辑,查看实际发送给数据库的SQL是否完整:for row in worksheet.iter_rows(min_row=2, values_only=True): id, name, category = row sql = "INSERT INTO category (id, name, category) VALUES (:1, :2, :3)" # 打印SQL和参数,验证语句结构 print(f"SQL语句: {sql}") print(f"参数: {(id, name, category)}") cur.execute(sql, (id, name, category))如果打印出的SQL缺少
VALUES或格式混乱,说明语句存在隐藏字符,手动重新输入SQL语句即可解决。校验Excel行数据格式
确保Excel从第二行开始的每一行都包含3个数据列,避免解包row时出现异常间接影响SQL执行:for idx, row in enumerate(worksheet.iter_rows(min_row=2, values_only=True), start=2): if len(row) != 3: print(f"第{idx}行列数异常,跳过该行: {row}") continue id, name, category = row sql = "INSERT INTO category (id, name, category) VALUES (:1, :2, :3)" cur.execute(sql, (id, name, category))尝试使用命名绑定变量
替换位置绑定为命名绑定,规避位置参数可能带来的隐性问题:for row in worksheet.iter_rows(min_row=2, values_only=True): id, name, category = row sql = "INSERT INTO category (id, name, category) VALUES (:id, :name, :category)" cur.execute(sql, {"id": id, "name": name, "category": category})
内容的提问来源于stack exchange,提问作者JoeTheProgrammer
相关产品推荐
相关产品推荐

