Может ли функция python odo ОБНОВЛЯТЬ записи в таблице базы данных - или она может только INSERT?Я унаследовал скрипт Python, который использует odo для вставки записей в таблицу базы данных.Мне нужно обновить столбец «Значение» в каждой записи, но, так как это происходит, когда я вводю записи только с измененным значением, происходит сбой с сообщением о нарушении ограничения уникальности для каждой записи, потому что odo пытается сделать INSERT вместоОБНОВИТЬ.Это ограничение с odo, что он может только вставить в базу данных, а не ОБНОВИТЬ?В моем случае я пытаюсь обновить таблицу базы данных Oracle.Я искал любой возможный дополнительный kwarg для функции odo, которая инструктировала бы odo делать ОБНОВЛЕНИЕ, если записи существуют, но я не смог найти такую опцию.
Вот код Python:
from odo import odo, dshape
...
# Reshape data for Oracle upload
idx_cols = ['C_LOAD_PROFILE', 'D_PROFILE', 'H_PROFILE']
pvt_lp = (data
.reset_index()
.set_index(idx_cols)
.loc[:, ['Q_ESTIMATED']]
.rename(columns={'Q_ESTIMATED': 'q_profile'})
.reset_index()
.rename(columns=str.lower)
.assign(c_load_profile_source=3)
.assign(c_lst_upd_user_id=un)
.assign(d_lst_upd=datetime.now()))
dtypes = """\
var * {c_load_profile: uint16,
d_profile: datetime,
h_profile: uint8,
q_profile: float64,
c_load_profile_source: uint8,
c_lst_upd_user_id: string,
d_lst_upd: datetime}
"""
ds = dshape(dtypes)
meta = MetaData(bind=self.oracle_db.engine, schema=schema)
tbl_name = 'hourly_load_profile'
meta.reflect(only=[tbl_name])
hlp = Table(tbl_name, meta)
tbl = odo(pvt_lp, hlp, dshape=ds)
, где последняя строка, которая вызывает функцию odo, принимает необязательные аргументы.Я надеюсь, что существует необязательный аргумент, чтобы разрешить UPDATE vs INSERT.