2017-07-04 1 views
0

Je ne parviens pas à obtenir des données CSV dans une table Oracle.Chargement de csv dans une table dans Oracle

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) 

résultat de l'impression:

Insert String = INSERT INTO area_harvest_summary_20170629a (PERIOD, AN, PERIODWIDTH, ObjectID, TSA_UKEY, POLY_NUM, CLUSTER, FMU, Landbase, WATERSHED, COMPARTIMENT, PROPRIÉTÉ, ZONE, YC, Couverture, AgeAtHarvest, HarvestYear, Traitement, NewYc, PriConifer, PriDecid, IncConifère, IncDecid, ConiferPieceSize, DecidPieceSize) VALEURS (: 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)

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

J'ai essayé zip (ligne) et zip (ligne, val_list), mais il ne le fait pas non plus.Est-ce un problème avec le format chaîne de nombres dans Row? Si oui, comment puis-je contourner cela? J'ai aussi essayé certaines des méthodes que j'ai trouvées sur google, mais encore une fois, pas de chance.

Idéalement, je voudrais dans une déclaration d'exécution, mais tous les efforts de ce côté ne fonctionnent pas.

+0

De l'erreur, il semblerait SQL est incorrect. Peut-être l'essayer dans SQL * Plus d'abord? –

Répondre

0

Vous avez inversé VALUES avec énumération des rows, changer à ce qui suit:

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)