TypeError:期望字符串或字节对象

问题描述 投票:-2回答:1

嗨,我正在尝试将CS​​V数据插入到oracle表中。但是出现错误为

TypeError:期望字符串或字节对象

with open('file.csv', 'r') as srcfile:
reader = csv.reader(srcfile, dialect = 'fileProperties')
header = next(reader)
header = ", ".join(str(h) for h in header)
insert = 'insert into table (' + header + ') values ('
#print(insert) 

for row in reader:
    data = [insert + str(row).strip("[]") + ');']

cur.prepare(data)
cur.execute(data)


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-154-8814eee5c788> in <module>
  1 #cur.prepare(data)
----> 2 cur.execute(data)

TypeError: expecting string or bytes object

如果代码有误,请指导我。

python cx-oracle
1个回答
0
投票
已解决问题。

    [第一个问题是,在使用executemany时不能将list作为参数传递,但是list使用execute时可以工作
  • 第二个问题是,插入时需要绑定源数据。但是,而不是困难对绑定变量进行编码,获取列名并传递绑定变量动态地进行操作,因此无需处理文件中添加或删除的任何列修改代码

    with open('G:\Project\ETL\data\CME.csv', 'r') as srcfile: reader = csv.reader(srcfile, dialect = 'fileProperties') header = next(reader) columns = ", ".join(str(h) for h in header) length = len(next(reader)) bind = [] data = [] for binds in range(1, length+1): bind.append(':' + str(binds)) insert = 'insert into ledger_source_python (' + columns + ') values (' + ", ".join(str(l) for l in bind) + ')' for row in reader: data.append(row) cur.executemany(insert, data) con.commit()

© www.soinside.com 2019 - 2024. All rights reserved.