使用Python将csv加载到Oracle中
我正在尝试将一个1 GB大小的csv文件(大约100万行)加载到Oracle表中,代码工作正常,如下所示:使用Python将csv加载到Oracle中,python,oracle,csv,Python,Oracle,Csv,我正在尝试将一个1 GB大小的csv文件(大约100万行)加载到Oracle表中,代码工作正常,如下所示: import cx_Oracle import csv connection1=cx_Oracle.connect("username", "password","ORADB") cur1 = connection1.cursor() with open("Test.csv", "r") as csv_file: csv_reader = csv.reader(csv_file, de
import cx_Oracle
import csv
connection1=cx_Oracle.connect("username", "password","ORADB")
cur1 = connection1.cursor()
with open("Test.csv", "r") as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
next(csv_reader)
i=0
sql1="""insert into TEST_CSV_FILE ( START_TS, END_TS,FLDR, TSK, INST, SRC_ERR,tgt_ERR)
values (:1, :2, :3, :4, :5, :6, :7)"""
list=[]
for lines1 in csv_reader:
print(lines1)
print(type(lines1))
cur1.execute(sql1,lines1)
i=i+1
print(i)
cur1.close()
connection1.commit()
connection1.close()
但是,性能非常糟糕,即使在2小时后也无法完成加载,是否有一种快速加载此文件的有效方法?我查阅了文档,并尝试使用ExecuteMy而不是execute,但当我尝试使用ExecuteMy时,我得到了以下信息:
cur1.executemany(sql1,lines1)
cx_Oracle.DatabaseError: ORA-01036: illegal variable name/number
任何帮助都将不胜感激
在Christopher和abhlb的帮助下,我更新了下面的代码,以批处理并使用ExecuteMy,但是由于批处理大小为3000,作业耗时2小时,性能仍然很差,我可以进行任何增强以提高性能吗
import cx_Oracle
import csv
from datetime import datetime
start=datetime.now()
connection1=cx_Oracle.connect("username", "password","oradb")
cur1 = connection1.cursor()
with open("test_file.csv", "r") as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
i=0
batch_size=3000
sql1="""insert into TEST_CSV_FILE ( START_TS, END_TS,FLDR, TSK, INST,
SRC_ERR,tgt_ERR)
values (:1, :2, :3, :4, :5, :6, :7)"""
data = []
for line in csv_reader:
data.append((line[0],line[1],line[2],line[3],line[4],line[5],line[6]))
if len(data) % batch_size == 0:
cur1.executemany(sql1, data)
data = []
if data:
cur1.executemany(sql1, data)
connection1.commit()
cur1.close()
connection1.close()
print(datetime.now()-start)
您需要将每一行转换为一个值元组 dataToInsert=[csv_读取器中x的元组] cur1.executemanysql1,dataToInsert cur1.close 连接1.commit 连接1.close
@okkadu您可能需要批量处理记录并多次调用executemany。请参阅在cx_Oracle@ChristopherJones中加载CSV文件的示例谢谢您的文档Christopher,我必须对它们进行批处理。@abhlib谢谢abhlib,这很有帮助,我认为如果我对它们进行批处理,我将能够完成我的工作,但现在无法一次性批处理所有数据。