python odo 函数是否能够更新数据库表中的记录 - 还是只能插入?我继承了一个使用 odo 将记录插入数据库表的 python 脚本。我需要更新每条记录中的值列,但是当我输入仅更改值的记录时,它会失败并报告违反每条记录的唯一性约束,因为 odo 正在尝试执行 INSERT 而不是更新。这是对 odo 的限制,它只能插入到数据库中,而不能更新?就我而言,我正在尝试更新 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。