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 中的绑定数量不正确