gow*_*Y.R 1 python csv oracle cx-oracle insert-into
我正在读取具有5列的csv文件并推送到oracle表
我知道这方面有很多资源。但是即使如此,我仍无法找到解决问题的方法
读取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语句
请帮我解决问题
问题是您试图将数组传递给单个插入语句。您在这里有两个选择:
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)
第二种方法效率更高,但是您必须确保每一行的数据类型都是一致的。如果一行中有一个数字,而下一行中有一个字符串,则会引发错误。
该文档提供了更多详细信息。