如何使用python odo更新数据库中的记录?

时间:2018-10-26 15:56:49

标签: python database odo

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。

0 个答案:

没有答案