【问题标题】:Loading csv to table in Oracle在 Oracle 中将 csv 加载到表中
【发布时间】:2017-12-07 07:36:07
【问题描述】:

我无法将 csv 数据导入 Oracle 表。

错误:

    Traceback (most recent call last):
    File "H:/Standard_Procedures/Dataset_Management/Table_to_Oracle.py", line 139, in <module>
      sde_cursor.execute(insert_string,row)
    DatabaseError: ORA-01747: invalid user.table.column, table.column, or column specification

代码:

with open(dataset) as f:
    reader = csv.reader(f, delimiter=',')
    column_string = ','.join(next(reader)).translate(None,'"')
    insert_string='INSERT INTO {} ({}) VALUES ('.format(dataset_name, column_string)
    val_list=[]
    for i in range(1,len(first_row)+1):
        val_list.append(':'+ str(i))
    value_string=','.join(val_list)
    insert_string += value_string + ')'
    for row in reader:
        print 'Insert String = {}'.format(insert_string)
        print 'Row = {}'.format(row)
        sde_cursor.execute(insert_string,row)

打印结果:

Insert String = INSERT INTO area_harvest_summary_20170629a (PERIOD,YEAR,PERIODWIDTH,ObjectID,TSA_UKEY,POLY_NUM,CLUSTER,FMU,LANDBASE,WATERSHED,COMPARTMENT,OWNERSHIP,AREA,YC,Cover,AgeAtHarvest,HarvestYear,Treatment,NewYc,PriConifer, PriDecid,IncConifer,IncDecid,ConiferPieceSize,DecidPieceSize) 值 (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13 ,:14,:15,:16,:17,:18,:19,:20,:21,:22,:23,:24,:25)

行 = ['1', '10', '10', 'A14029867', '7025115', '851840750', 'A14010716', 'A14', 'CON', '480', 'A14-A ','Northlan','9.022459984','5','C_Mx_Sw','118','5','Inten','5','1718.527663','0','0','598.0849757', '0.371338338', '0.287112087']

我尝试过 zip(row) 和 zip(row,val_list) 但也没有。Row 中数字的字符串格式有问题吗?如果是这样,我该如何解决这个问题?我也尝试了一些我在 google 上找到的方法,但同样没有运气。

理想情况下,我希望在 executemany 语句中这样做,但是这方面的所有努力也都不起作用。

【问题讨论】:

  • 从错误看来您的 SQL 不正确。或许先在 SQL*Plus 中尝试一下?

标签: python python-2.7 csv cx-oracle


【解决方案1】:

你已经用rows的枚举反转了VALUES,改为如下:

with open(dataset) as f:
    ...
    # Don't change insert_string
    # insert_string += value_string + ')'
    for row in reader:
        # Append this row Data
        print 'Insert String = {}'.format(insert_string + row)
        sde_cursor.execute(insert_string + row)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    相关资源
    最近更新 更多