Python 3.x 通过python加速Oracle数据库的加载

Python 3.x 通过python加速Oracle数据库的加载,python-3.x,oracle,cx-oracle,Python 3.x,Oracle,Cx Oracle,我正在尝试使用cx_Oracle和python将csv文件转储到我的表中。但速度之慢令人无法忍受(336秒内创下500张记录)。如果还有比这更快的方法,请告诉我。代码如下 import pandas as pd import cx_Oracle import time connection_string = '{}/{}@//{}:{}/{}'.format(user_name, password, host_name, port, service_name) engine = cx_Ora

我正在尝试使用cx_Oracle和python将csv文件转储到我的表中。但速度之慢令人无法忍受(336秒内创下500张记录)。如果还有比这更快的方法,请告诉我。代码如下

import pandas as pd
import cx_Oracle
import time


connection_string = '{}/{}@//{}:{}/{}'.format(user_name, password, host_name, port, service_name)
engine = cx_Oracle.connect(connection_string)


start_time = time.time()

t = pd.read_sql(con=engine, sql='select * from students where rownum < 18000')

print(t.shape)

t.to_sql(con=engine, name='students_new', if_exists='append', index=False)

print("Finished in : " + str(round(time.time() - start_time, 2)))
将熊猫作为pd导入
导入cx_Oracle
导入时间
连接字符串='{}/{}@/{}:{}/{}'。格式(用户名、密码、主机名、端口、服务名)
引擎=cx\u Oracle.connect(连接\u字符串)
开始时间=time.time()
t=pd.read_sql(con=engine,sql='select*来自rownum<18000'的学生)
印刷品(t形)
t、 to_sql(con=engine,name='students\u new',如果_exists='append',index=False)
打印(“完成时间:”+str(四舍五入(time.time()-start_time,2)))

您给出的示例代码与书面问题不匹配

如果您想使用Python将数据作为CSV文件加载到Oracle数据库中,本手册的一节提供了直接的cx_Oracle示例。您需要使用
executemany()
在每次调用数据库时上载尽可能多的数据

要从手册中剪切和粘贴,请执行以下操作:

import cx_Oracle
import csv

. . .

# Predefine the memory areas to match the table definition
cursor.setinputsizes(None, 25)

# Adjust the batch size to meet your memory and performance requirements
batch_size = 10000

with open('testsp.csv', 'r') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    sql = "insert into test (id,name) values (:1, :2)"
    data = []
    for line in csv_reader:
        data.append((line[0], line[1]))
        if len(data) % batch_size == 0:
            cursor.executemany(sql, data)
            data = []
    if data:
        cursor.executemany(sql, data)
    con.commit()

您给出的示例代码与书面问题不匹配

如果您想使用Python将数据作为CSV文件加载到Oracle数据库中,本手册的一节提供了直接的cx_Oracle示例。您需要使用
executemany()
在每次调用数据库时上载尽可能多的数据

要从手册中剪切和粘贴,请执行以下操作:

import cx_Oracle
import csv

. . .

# Predefine the memory areas to match the table definition
cursor.setinputsizes(None, 25)

# Adjust the batch size to meet your memory and performance requirements
batch_size = 10000

with open('testsp.csv', 'r') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    sql = "insert into test (id,name) values (:1, :2)"
    data = []
    for line in csv_reader:
        data.append((line[0], line[1]))
        if len(data) % batch_size == 0:
            cursor.executemany(sql, data)
            data = []
    if data:
        cursor.executemany(sql, data)
    con.commit()

跳过python的废话,使用csv作为oracle@OldProgrammer我必须自动化这个过程,python是我最好的选择。外部表很好,但需要在DB服务器机器上,这对大多数人来说并不实用。跳过python的废话,使用csv作为oracle@OldProgrammer我必须自动化这个过程,python是我最好的选择。外部表很好,但需要在DB服务器上,这对大多数人来说不太实用。