TypeError: expecting string or bytes object

TypeError: expecting string or bytes object

我正在尝试将 CSV 数据插入 Oracle table。但是出现错误

TypeError: expecting string or bytes object

代码:

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

如何修复代码?

已解决问题。

  • 第一个问题是,使用 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()