Python executemany 函数

Posted

技术标签:

【中文标题】Python executemany 函数【英文标题】:Python executemany function 【发布时间】:2015-03-12 14:12:21 【问题描述】:

使用 cx_oracle 运行 executemany 时遇到问题

当我运行以下语句时,我收到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() 方法,它可以正常工作,但需要很长时间。

【问题讨论】:

infotext_list 是什么以及您收到的确切错误消息是什么。 没人有什么建议吗? :// 【参考方案1】:

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

1- 将 infotext_list 更改为 mappings or sequences 的列表

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 操作here 的简短文章。

【讨论】:

以上是关于Python executemany 函数的主要内容,如果未能解决你的问题,请参考以下文章

使用 fast_executemany 写入 MS-Access DB 不起作用

如何使用 executemany 处理异常(MySQL 和 Python)

Python3 | sqlite3:executemany() 不插入任何内容

Python Sqlite3 executemany 中的绑定数量不正确

如何使用 executemany 将每个 Key 中的第一个值写入数据库

在python中执行executemany命令时出现KeyError