Oracle データベース テーブルに挿入したい毎月の気象データがありますが、より効率的にするために、対応するレコードをバッチで挿入したいと考えています。Pythonでこれを行う方法について誰かアドバイスできますか?
たとえば、テーブルにステーション ID、日付、2 つの値フィールドの 4 つのフィールドがあるとします。レコードは、ステーション ID と日付フィールド (複合キー) によって一意に識別されます。各ステーションに挿入する必要がある値は、X 年分のデータを含むリストに保持されます。たとえば、2 年の値がある場合、値リストには 24 個の値が含まれます。
一度に 1 つずつレコードを挿入したい場合は、以下のようにすると思います。
connection_string = "scott/tiger@testdb"
connection = cx_Oracle.Connection(connection_string)
cursor = cx_Oracle.Cursor(connection)
station_id = 'STATION_1'
start_year = 2000
temps = [ 1, 3, 5, 7, 9, 1, 3, 5, 7, 9, 1, 3 ]
precips = [ 2, 4, 6, 8, 2, 4, 6, 8, 2, 4, 6, 8 ]
number_of_years = len(temps) / 12
for i in range(number_of_years):
for j in range(12):
# make a date for the first day of the month
date_value = datetime.date(start_year + i, j + 1, 1)
index = (i * 12) + j
sql_insert = 'insert into my_table (id, date_column, temp, precip) values (%s, %s, %s, %s)', (station_id, date_value, temps[index], precips[index]))
cursor.execute(sql_insert)
connection.commit()
上記のことを行う方法はありますが、効率を上げるためにバッチ挿入を実行する方法はありますか? ところで、私の経験は Java/JDBC/Hibernate に関するものなので、誰かが Java アプローチと比較した説明/例を提供できれば、特に役に立ちます。
編集:おそらくここで説明されているように、cursor.executemany() を使用する必要がありますか?
提案、コメントなど、事前に感謝します。