使用python从CSV插入oracle表

gow*_*Y.R 1 python csv oracle cx-oracle insert-into

我正在读取具有5列的csv文件并推送到oracle表

CSV文件结构

我知道这方面有很多资源。但是即使如此,我仍无法找到解决问题的方法

读取CSV到python的代码:

 import csv
 reader = csv.reader(open("sample.csv","r"))
 lines=[]
 for line in reader:
      lines.append(line)
  print lines 
Run Code Online (Sandbox Code Playgroud)

输出:

[['Firstname','LastName','email','Course_name','status'],['Kristina','Bohn','abc@123.com','Cnally管理中的二氧化碳分析指南病患者(CE)”,“注册”],[“佩吉”,“卢兹”,“ gef@123.com”,“在阿片类药物分娩期间监测EtCO2的指南(CE)”,“进行中”]]

将列表推送到Oracle表的代码:

import cx_Oracle
con = cx_Oracle.connect('username/password@tamans*****vd/Servicename')
ver=con.version.split(".")
print(ver)
cur=con.cursor()
cur.execute("INSERT INTO TEST_CSODUPLOAD ('FIRSTNAME','LASTNAME','EMAIL','COURSE_NAME','STATUS') VALUES(:1,:2,:3,:4,:5)",lines)
con.commit ()
cur.close()
Run Code Online (Sandbox Code Playgroud)

我收到错误消息:

DatabaseError:ORA-01484:数组只能绑定到PL / SQL语句

请帮我解决问题

Ant*_*nga 5

问题是您试图将数组传递给单个插入语句。您在这里有两个选择:

1)使用循环分别插入每一行:

for line in lines:
    cursor.execute("insert into ...", line)
Run Code Online (Sandbox Code Playgroud)

2)代替使用cursor.executemany()进行数组插入

cursor.executemany("insert into ...", lines)
Run Code Online (Sandbox Code Playgroud)

第二种方法效率更高,但是您必须确保每一行的数据类型都是一致的。如果一行中有一个数字,而下一行中有一个字符串,则会引发错误。

文档提供了更多详细信息。