python odoo函数是否能够更新数据库表中的记录-还是只能插入?我继承了一个使用odo将记录插入数据库表中的python脚本。我需要更新每个记录中的“值”列,但是当我输入仅更改了“值”的记录时,它失败并报告违反了每个记录的唯一性约束,因为odo尝试执行INSERT而不是更新。这是odo的限制,它只能插入数据库而不能插入UPDATE吗?就我而言,我正在尝试更新Oracle数据库表。我一直在寻找odo函数的任何可能的可选kwarg,如果记录存在,该函数会指示odo进行UPDATE,但是我一直找不到这样的选项。
这是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与INSERT。