0

executemany使用 cx_oracle运行时出现问题

当我运行以下语句时,我收到ORA-01036: illeagal variablename/number

infotext_list是一个字符串列表,应该与"SOMETHING" 它看起来像 ["abc", "bcd", "def", ...] 进行比较,并且其中的每个字符串都应该与其他数据库表中的 SOMETHING 进行比较!

insert_stmt = 'INSERT INTO data_table (...) SELECT ... FROM other_table WHERE SOMETHING = ? '
curs.executemany(insert_stmt, infotext_list)

如果我遍历infotext_list并使用标准execute()方法,它就可以正常工作,但需要永远。

4

1 回答 1

0

我改变了几件事来让它为我工作。

1- 将 infotext_list 更改为映射或序列列表

infotext_list = [("abc",), ("bcd",), ("def",)] --notice the extra , inside the ()

或者

infotext_list = [{'value':"abc"}, {'value':"bcd"}, {'value':"def"}]

2-改变?如果要使用映射,则为 :value ;如果要使用序列,则为 :1 (或您想要的任何其他 :name )

这两个都对我有用

infotext_list = [("abc",), ("bcd",), ("def",)]
insert_stmt = 'INSERT INTO data_table (...) SELECT ... FROM other_table WHERE SOMETHING = :1 '
curs.executemany(insert_stmt, infotext_list)

infotext_list = [{'value':"abc"}, {'value':"bcd"}, {'value':"def"}]
insert_stmt = 'INSERT INTO data_table (...) SELECT ... FROM other_table WHERE SOMETHING = :value '
curs.executemany(insert_stmt, infotext_list)

我在这里写了一篇关于使用 cx_Oracle 进行 crud 操作的简短文章

于 2015-12-11T07:43:46.857 回答