Ускорение загрузки до Oracle базы данных до python - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь вывести csv-файлы в свою таблицу, используя cx_ Oracle и python. Но это невыносимо медленно (500 записей за 336 секунд). Пожалуйста, позвольте мне, если есть какой-либо другой метод быстрее, чем этот. Код ниже

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)))

1 Ответ

2 голосов
/ 02 апреля 2020

Код примера, который вы дали, не соответствует письменному вопросу.

Если вы хотите загрузить данные из файла CSV в базу данных Oracle, используя Python, прямой пример cx_ Oracle в разделе Загрузка файлов CSV в 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...