2017-07-04 4 views
0

Ich kann CSV-Daten nicht in eine Oracle-Tabelle erhalten.CSV in Oracle Tabelle laden

ERROR:

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 

Code:

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) 

PRINT RESULT:

Insert String = INSERT INTO area_harvest_summary_20170629a (ZEIT, YEAR, PERIODWIDTH, ObjectID, TSA_UKEY, POLY_NUM, CLUSTER, FMU, Landbase, WATERSHED, RAUM, EIGENTUM, GEBIET, YC, Abdeckung, AgeAtHarvest, HarvestYear, Behandlung, NewYc, PriConifer, PriDecid, IncConifer, IncDecid, ConiferPieceSize, DecidPieceSize) WERTE (: 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)

Reihe = ['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']

Ich habe versucht, zip (Zeile) und zip (Zeile, val_list) aber tut es auch nicht.Ist es ein Problem mit dem String-Format von Zahlen in Zeile? Wenn ja, wie komme ich damit klar? Ich habe auch einige Methoden ausprobiert, die ich bei Google gefunden habe, aber auch hier kein Glück.

Idealerweise würde ich dies in einer Executemany-Anweisung mögen, aber alle Bemühungen auf dieser Seite funktionieren auch nicht.

+0

Von der Fehler scheint es, Ihre SQL falsch ist. Vielleicht zuerst in SQL * Plus ausprobieren? –

Antwort

0

Sie rückgängig gemacht haben VALUES mit Auszählung von rows, wechseln Sie in das folgende:

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)