Oracle数据库批量插入CSV数据
最近遇到一个比较蛋疼的事,需要把70G的csv数据导入到Oracle数据库中。一开始觉得没啥,可是当开始导入的时候我发现一个问题,好TM慢…
最后问了好多朋友,找了个批量导入的方法
下面是我的数据格式:
第一列是时间格式的数据,Oracle数据库插入数据对时间格式的数据要求和其他数据库不同,需要进行格式转换,所以插入语句的建立要写对,具体可以自己去了解一下
1、链接数据库
oracle_prepare.py文件,这个是用来数据库交互的:
import cx_Oracle
class OrecleCommand(object):
def __init__(self):
self.host = "localhost:1521/orcl" # IP/端口
self.user = "****" # 用户名
self.password = "****" # 密码
def connectOracle(self):
try:
self.conn = cx_Oracle.connect(self.user, self.password, self.host)
self.cursor = self.conn.cursor()
except cx_Oracle.Error as error:
print(error)
def insertDataTimeSeries(self, my_dict):
try:
self.cursor.prepare("INSERT INTO 表名(DATETIMES,RECORD,Ux,Uy,Uz,Ts,diag_sonic,CO2,H2O,diag_irga,Tc,amb_tmpr,amb_press,CO2_sig_strgth,H2O_sig_strgth) VALUES (TO_TIMESTAMP(:1,'YYYY-MM-DD HH24:MI:SS.FF6'),:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15)")
self.cursor.executemany(None, my_dict)
self.conn.commit()
except cx_Oracle.Error as error:
print(error)
def closeOracle(self):
self.cursor.close()
self.conn.close()
2、文件操作
csv_to_oracle.py文件,操作csv文件
import os
import csv
from oracle_prepare import OrecleCommand
def csv_with(csv_path, file_name_list):
result = []
orecleCommand = OrecleCommand()
orecleCommand.connectOracle() #建立数据库连接
for file_item_name in file_name_list: #遍历文件名
csv_all_path = os.path.join(csv_path, file_item_name) #建立单个文件全路径
with open(csv_all_path,"r") as csv_file:
reader=csv.reader(csv_file)
for line_list in reader:
result.append((line_list[0],line_list[1],line_list[2],line_list[3],line_list[4],line_list[5],line_list[6],line_list[7],line_list[8],line_list[9],line_list[10],line_list[11],line_list[12],line_list[13],line_list[14]))
orecleCommand.insertDataTimeSeries(result) #插入数据入库
result.clear() #一定要清空列表!!!,不然数据会累积
orecleCommand.closeOracle() #关闭数据库连接
csv_path =r"E:\Time_CSV" #所有csv的文件路径
file_name_list = os.listdir(csv_path) #获取所有文件路径下的文件名
csv_with(csv_path, file_name_list)
推荐参考https://blog.csdn.net/colourless/article/details/41444069#commentBox