首页 > 解决方案 > 如何使用 python odo 更新数据库中的记录?

问题描述

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。

标签: pythondatabaseodo

解决方案


推荐阅读