Использование Python для загрузки набора данных из 10-мм записей в таблицу базы данных Oracle. Датафрейм создан без проблем. При загрузке записи в фрейм данных слишком большая ошибка из cx_Oralce.
Стремясь циклически перебирать кадры данных и пакетно загружать записи 10 ММ, вставляя по 100 000 записей за раз.
Код, показанный ниже, работает, но только для небольших наборов данных, которые помещаются в выделенную память. Мне нужен тот, который работает для пакетов и больших наборов данных
Пробовал перебирать строки, но это занимает очень много времени. Также попытался загрузить гораздо меньший фрейм данных - это работает, но не достигает цели.
Также пытался использовать Bindarray и размер массива для размещения данных, но ничего не получалось.
import pandas as pd
import datetime
import sys
import re
from itertools import groupby, islice, takewhile
import cx_Oracle
format = '%y_%m_%d'
TODAY = datetime.date.today()
add = datetime.timedelta(days=1)
yesterday = datetime.date.today() - add
dd = datetime.date.strftime(TODAY,format)
# connection variables
connection = cx_Oracle.connect("user/Oracle_database_connect_info")
cur = connection.cursor()
# dataframe headers
columns = ['C1','C2','C3','C4']
# -- >> test and sample the file
csv_df = pd.read_csv(r'csvfile_location')
# add record_id for values
csv_df_idx = csv_df.index.values +1
csv_df.insert(0,column = 'RECORD_ID' , value=csv_df_idx)
### TABLE ALREADY CREATED IN DATABASE ###
for index, row in csv_df.iterrows():
### Insert and Iterate to inset records
### Convert to list for easy load into DB
csv_df_dataset_lst = csv_df.values.tolist()
insert_statement = """
INSERT INTO TEST_LOAD
( RECORD_ID ,C1 ,C2 ,C3 ,C4)values (:1,:2,:3,:4,:5) """
# control number of records to bind for insert
# cur.bindarraysize = 100000 # --->>> did not work
# cur.arraysize = 100000 # --->>> did not work
cur.executemany(insert_statement,csv_df_dataset_lst)
connection.commit()
connection.close()