我正在尝试编写一个 Python 脚本,该脚本将从 Excel 文档中读取数据,然后将其写入 Oracle 数据库中的单个表中。我目前正在使用xlrd
从 Excel 文档中读取cx_Oracle
数据并将数据插入数据库。
我之前使用嵌套的 for 循环结构来遍历 Excel 文档中的每一列,将每列值存储在变量中,将值插入表中,然后对每一行执行此操作。但是,这对于几千行数据来说效率相当低,我希望使用executemany()
带有 cx_Oracle 的语句来做到这一点
我目前正在使用此代码将数据加载到列表列表中,然后调用 executemany() 命令:
rows = []
for rownum in range (sh1.nrows):
column_value = sh1.row_values(rownum)
EMPLOYEE = column_value[1]
ITEM_DATE = column_value[2]
HOURS = column_value[3]
row = [EMPLOYEE, ITEM_DATE, HOURS]
rows.append(row)
query ="""INSERT INTO TABLE1 (EMPLOYEE, ITEM_DATE, HOURS) VALUES (:1, :2, :2)"""
# executemany by passing list rows with tuples (EMPLOYEE, ITEM_DATE, HOURS)
cursor.executemany(query, rows)
行列表如下所示:
[[u'Employee 1', 10000.0, 8.0], [u'Employee 1', 10001.0, 8.0], [u'Employee 1', 10002.0, 8.0]....]
# I have disguised the names and numbers here
但是,执行 executemany() 语句时出现类型错误:
cursor.executemany(query, rows)
TypeError: expecting string, unicode or buffer object
执行(在读取的最后一行数据上执行单个插入)时,查询执行得非常好cursor.execute(query, row)
,所以我认为参数列表的格式化方式有问题,而不是查询字符串。但是,根据本教程,我的参数显示正确格式有人可以帮助我理解为什么我的代码不起作用吗?
更新:所以我尝试手动将一些数据插入到rows
变量中,看看我的格式是否关闭,并去掉了 unicode 字符:
rows = [['Employee 1', 10000.0, 8.0], ['Employee 1', 10001.0, 8.0], ['Employee 1', 10002.0, 8.0]]
插入这三个条目工作得很好,所以我目前正在调查 unicode 字符作为问题的原因。任何帮助仍将不胜感激。