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

Django调用Oracle插入数据重复两行的原因排查求助

问题:Django 4.1.1向Oracle插入数据时出现重复行

我在使用Django 4.1.1开发时,调用API向Oracle数据库执行插入操作后,表中出现了两行重复数据。已通过断点确认API仅被调用一次,后端无重复逻辑,但重复记录依然出现。

相关代码

@api_view(['PUT'])
def updateRule1(request, id):
    nums15 = 'OK'
    json_data = json.loads(request.body)
    # print(json_data)
    con = None
    cur = None

    try:
        con = cx_Oracle.connect('<server connection details>')
        cur = con.cursor()
    except cx_Oracle.DatabaseError as e:
        print("Problem establishing connection with Oracle DB", e)

    q = "INSERT INTO XXMSE.RE_PREDICATE (RULE_ID, PREDICATE_ID, INPUT_VALUE_ID1, MATHEMATICAL_VALUE, INPUT_VALUE_ID2, BOOLEAN_OPERATOR) VALUES ('1','2','2000000','equals','30000000','None')"
    print(q)
    sql5 = cur.execute(q)
    cur.execute(sql5)
    con.commit()

    if cur:
        cur.close()
    if con:
        con.close()    
    
    return Response(nums15)

数据库重复记录

IDIdxValue_1OperatorValue_2Boolean
111equals2AND
122000000equals30000000None
122000000equals30000000None

原因及解决方案

问题根源是代码中重复执行了两次INSERT操作:

  • sql5 = cur.execute(q):这行已执行一次INSERT,向数据库插入一行数据
  • cur.execute(sql5):这是冗余错误代码,cur.execute()执行DML语句后返回cursor对象本身,再次调用execute()传入该对象会触发第二次INSERT,最终生成重复行

解决方案:删除cur.execute(sql5)这行代码,仅保留cur.execute(q)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:35:18