Вставка cx_oracle с запросом выбора не работает - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь вставить в базу данных (Oracle) в Python с помощью cx_oracle. Мне нужно выбрать из таблицы и вставить в другую таблицу.

 insert_select_string = "INSERT  INTO wf_measure_details(PARENT_JOB_ID,  STAGE_JOB_ID,  MEASURE_VALS,  STEP_LEVEL,  OOZIE_JOB_ID,  CREATE_TIME_TS) \
                               select PARENT_JOB_ID,  STAGE_JOB_ID,  MEASURE_VALS,  STEP_LEVEL,  OOZIE_JOB_ID,  CREATE_TIME_TS from wf_measure_details_stag where oozie_job_id = '{0}'.format(self.DAG_id)"

 conn.executemany(insert_select_string)
 conn.commit()
 insert_count = conn.rowcount

Но я получаю ошибку ниже. У меня нет параметра выбора данных, поскольку данные поступают из запроса выбора.

Required argument 'parameters' (pos 2) not found

Пожалуйста, предложите, как решить эту проблему

1 Ответ

0 голосов
/ 31 октября 2019

Как уже упоминал Крис в комментариях к вашему вопросу, вы хотите использовать cursor.execute () вместо cursor.executemany (). Вы также хотите использовать переменные связывания вместо интерполированных параметров, чтобы повысить производительность и снизить риски безопасности. Взгляните на документацию . В вашем случае вы хотели бы что-то вроде этого (не проверено):

cursor.execute("""
        INSERT  INTO wf_measure_details(PARENT_JOB_ID,  STAGE_JOB_ID,
                MEASURE_VALS,  STEP_LEVEL,  OOZIE_JOB_ID,  CREATE_TIME_TS)
        select PARENT_JOB_ID,  STAGE_JOB_ID,  MEASURE_VALS,  STEP_LEVEL,
                OOZIE_JOB_ID,  CREATE_TIME_TS
        from wf_measure_details_stag
        where oozie_job_id = :id""",
        id=self.DAG_id)
...