Как использовать Python Odo для обновления записей в базе данных? - PullRequest
0 голосов
/ 26 октября 2018

Может ли функция python odo ОБНОВЛЯТЬ записи в таблице базы данных - или она может только INSERT?Я унаследовал скрипт Python, который использует odo для вставки записей в таблицу базы данных.Мне нужно обновить столбец «Значение» в каждой записи, но, так как это происходит, когда я вводю записи только с измененным значением, происходит сбой с сообщением о нарушении ограничения уникальности для каждой записи, потому что odo пытается сделать INSERT вместоОБНОВИТЬ.Это ограничение с odo, что он может только вставить в базу данных, а не ОБНОВИТЬ?В моем случае я пытаюсь обновить таблицу базы данных Oracle.Я искал любой возможный дополнительный kwarg для функции odo, которая инструктировала бы odo делать ОБНОВЛЕНИЕ, если записи существуют, но я не смог найти такую ​​опцию.

Вот код 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 vs INSERT.

...