cx_oracle 使用 select 查询插入无效
cx_oracle insert with select query not working
我正在尝试使用 cx_oracle 在 python 中插入数据库 (Oracle)。我需要从 table select 插入另一个 table.
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
但是我遇到了以下错误。我没有数据的 select 参数,因为数据来自 select 查询。
Required argument 'parameters' (pos 2) not found
请建议如何解决这个问题
正如 Chris 在对您的问题的评论中提到的,您想使用 cursor.execute() 而不是 cursor.executemany()。您还希望使用绑定变量而不是内插参数,以提高性能并降低安全风险。看看documentation。在你的情况下你会想要这样的东西(未经测试):
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)
我正在尝试使用 cx_oracle 在 python 中插入数据库 (Oracle)。我需要从 table select 插入另一个 table.
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
但是我遇到了以下错误。我没有数据的 select 参数,因为数据来自 select 查询。
Required argument 'parameters' (pos 2) not found
请建议如何解决这个问题
正如 Chris 在对您的问题的评论中提到的,您想使用 cursor.execute() 而不是 cursor.executemany()。您还希望使用绑定变量而不是内插参数,以提高性能并降低安全风险。看看documentation。在你的情况下你会想要这样的东西(未经测试):
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)