python - 如何使用 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。
解决方案
推荐阅读
- java - JavaFx IllegalStateException:未设置位置
- html - 如何创建表单模式弹出窗口
- c++ - 除了在 Linux 中使用 readlink 之外,如何获取当前 exe 的路径?
- javascript - 在 ES6 中使用递归 reduce 转换所有子对象
- wpf - Visual Studio App Center 是否支持 WPF 应用程序?
- c# - 在 Ubuntu 18.04 上构建脚本出现错误
- file - perl如何读取命令行参数,就好像它是文件内容一样
- sql - 如何获得每天包含多个列的事件的第一个实例,包括日期时间并返回这些列加上完整的日期时间值?
- javascript - 我怎样才能让球在任何地方跳跃?
- c - 允许用户在 C 中编辑已经打印在屏幕上的文本