У меня есть Oracle Table
с именем Consumer
с 10 столбцами, где column# 2, 3 and 4
представляет собой первичный ключ для него. Теперь я хочу вставить в эту таблицу через оператор Pandas Dataframe
, используя оператор Insert...On Duplicate Key Update
SQL.
Сначала я преобразую любые pandas NaN или NaT в Oracle None, а затем преобразую Dataframe строк в кортежи для вставки. Если во время вставки возникает нарушение первичного ключа, мне нужно обновить только последние 4 столбца таблицы.
Код, который я здесь использую, выглядит следующим образом:
df1 = df.astype(object).where(df.notnull(), None)
rows = [tuple(x) for x in df1.values]
query = """INSERT INTO CONSUMER VALUES (:1,:2,:3, :4, :5, :6, :7, :8, :9, :10) ON DUPLICATE KEY UPDATE
DT = VALUES(:7),
AT = VALUES(:8),
OB = VALUES(:9),
UT = VALUES(:10)"""
dbcur.executemany(query, rows)
dbcon.commit()
Где DT, AT, OB и UT являются именами последних 4 столбцов в таблице. Но это дает мне следующую ошибку:
cx_Oracle.DatabaseError: ORA-00933: SQL command not properly ended
Может кто-нибудь помочь мне выяснить и исправить то, что не так с моим кодом? Большое спасибо заранее.