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

Python中Oracle数据库INSERT语句报错ORA-01036的解决求助

解决Python操作Oracle INSERT时的ORA-01036错误

核心原因

你用的%s是MySQL等数据库的占位符格式,但Oracle的Python驱动(如cx_Oracle)不支持这种写法,必须使用位置占位符(:1, :2...)或命名占位符,这是触发ORA-01036: illegal variable name/number错误的主要原因。此外,占位符数量必须和传入的变量数量完全匹配。

修正步骤及代码示例

1. 使用位置占位符(推荐)

将VALUES中的%s替换为:n(n从1开始递增),同时确保占位符数量、变量数量、表字段数量三者完全对应:

# 明确写出表的所有13个字段(对应Column_ID 1-13)
insert_sql = """INSERT INTO Tablename (column1, column2, column3, column4, column5, column6, column7, column8, column9, column10, column11, column12, column13) 
                VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13)"""
# 变量元组需包含13个元素,和占位符、字段一一对应
vals = (variable1, variable2, '', '', Variable5, '', '', '', '', '', '', '', '')
c.execute(insert_sql, vals)

2. 使用命名占位符

如果字段较多,用命名占位符更易维护,占位符名称需和字段名对应,参数用字典传递:

insert_sql = """INSERT INTO Tablename (column1, column2, column3, column4, column5, column6, column7, column8, column9, column10, column11, column12, column13) 
                VALUES (:col1, :col2, :col3, :col4, :col5, :col6, :col7, :col8, :col9, :col10, :col11, :col12, :col13)"""
vals = {
    'col1': variable1,
    'col2': variable2,
    'col3': '',
    'col4': '',
    'col5': Variable5,
    'col6': '',
    'col7': '',
    'col8': '',
    'col9': '',
    'col10': '',
    'col11': '',
    'col12': '',
    'col13': ''
}
c.execute(insert_sql, vals)

额外检查点

  • 确认vals的元素数量和INSERT语句中占位符的数量完全一致,多/少一个都会触发错误
  • 检查字段列表是否完整,确保和目标表的13个字段一一对应,没有漏写或多写
  • 若使用cx_Oracle驱动,确保驱动版本与Oracle数据库版本兼容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:15:36