В Django, когда я передаю запрос для вставки строки, в Oracle Db строка вставляется в таблицу дважды.

@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)

Снимок экрана БД |ID |Idx|Value_1 |Operator|Value_2 |Boolean | |---|---|----------|--------|-----------|--------| |1 |1 |1 |1 |equals |2 |AND | |1 |2 |2000000 |equals |30000000 |None |
. |1 |2 |2000000 |equals |30000000 |None |

Я вижу, что в БД вставлено 2 строки. Версия Django - 4.1.1

В чем может быть причина дублирования строк? Благодарю за помощь

Я использовал breakpoint() и убедился, что api вызывается один раз. В бэкенде нет дублирующих записей.

вы дважды вызываете cur.execute(...). Не уверен, что вы хотите с этим делать, но я думаю, что дважды вызываемые записи происходят из этих строк, вероятно

Похоже, что вы дважды вызываете функцию execute в своем коде

sql5 = cur.execute(q)
cur.execute(sql5)

удаление второй строки исправит проблему

Вернуться на верх