gpt4 book ai didi

python - 在 Python 中使用 cx_Oracle 和 xlrd 的带有列表列表的 executemany() 返回 TypeError

转载 作者:行者123 更新时间:2023-11-28 16:40:45 25 4
gpt4 key购买 nike

我正在尝试编写一个 Python 脚本,该脚本将从 Excel 文档中读取数据,然后将其写入 Oracle 数据库中的单个表。我目前正在使用 xlrd 从 Excel 文档中读取数据,并使用 cx_Oracle 将数据插入数据库。

我之前使用嵌套的 for 循环结构完成此操作以遍历 Excel 文档中的每一列,将每一列的值存储在一个变量中,将值插入表中,然后对每一行执行此操作。但是,这对于几千行数据来说效率很低,我希望使用带有 cx_Oracle 的 executemany() 语句来做到这一点

我目前正在使用这段代码将数据加载到列表列表中,然后调用 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)(在读取的最后一行数据上执行一次插入)时,查询执行得非常好,所以我认为这种方式有问题参数列表被格式化,而不是查询字符串。但是,我的参数显示格式正确,符合 this tutorial谁能帮我理解为什么我的代码不起作用?

更新:所以我尝试手动将一些数据插入到 rows 变量中以查看我的格式是否已关闭,并删除了 unicode 字符:

rows = [['Employee 1', 10000.0, 8.0], ['Employee 1', 10001.0, 8.0], ['Employee 1', 10002.0, 8.0]]

插入这三个条目工作得很好,所以我目前正在调查 unicode 字符是问题的原因。任何帮助仍将不胜感激。

最佳答案

看起来 unicode 是整个问题所在。我在 for 循环中使用了 print type(EMPLOYEE) 并确认员工姓名是用 unicode 编码的,而数据库只是期待一个 ascii 字符串。我使用 str() 函数转换了值,一切正常。唯一的缺点是如果员工姓名中实际上有 unicode 字符,str() 命令将抛出错误,因此我很快就会研究实际转换字符串以处理 unicode 字符。

关于python - 在 Python 中使用 cx_Oracle 和 xlrd 的带有列表列表的 executemany() 返回 TypeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19568880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com