IT Learning

実践形式でITのお勉強

Oracle Python

【Python】cx_Oracleでデータを一括挿入する方法

投稿日:2020年6月9日 更新日:

概要

pythonからOracleデータベースを操作するライブラリとしてcx_Oracleがあります。cx_Oracleを使ってOracleデータベースへレコードを挿入することはもちろん可能ですが、 大量のレコードを挿入したい場合 は1レコードずつだと時間がかかってしまいます。今回はこれを少しでも短い時間で実現するために、 一括で挿入する 方法について実践してみました。


環境

python 3.7.3
Oracle 18c Express Edition

無料で使用できるOracle Express Editionのインストール方法についてはこちらを参考にしてください。


Step1 : Oracle側テーブル作成

まずはOracle側にテスト用のとして、USER01というスキーマを定義し、その下にoracle_insertという名前のテーブルオブジェクトを作りました。

SQLは以下のようなコードです。

CREATE TABLE USER01.ORACLE_INSERT(
	col1 int
	,col2 int
	,col3 int
)


Step2 : Pythonによる一括挿入コード

続いてPythonから先ほど作成したOracleのテーブルへデータを挿入するコードを書いていきます。流れとしては以下です。

  • datasetで挿入するデータを作成
  • cx_Oracleで接続を作成
  •  cur.executemany()で 引数にsqlとdatasetを入れ、 一括で挿入 
  • commitとconnection.closeして終了
#cx_Oracleライブラリの読み込み
import cx_Oracle

#リスト型でデータセットを定義
dataset =[
    [1,2,3]
    ,[4,5,6]
    ,[7,8,9]
    ,[10,11,12]
    ,[13,14,15]
    ,[16,17,18]
    ,[19,20,21]
] 

#Oracleデータベースへの接続情報の定義
HOST = 'localhost'
PORT = '1521'
DB_NAME = 'xepd1'
USER = 'user01'
PASSWORD = 'password01'
SERVICE_NAME = 'xepdb1'

#接続の作成 
tns = cx_Oracle.makedsn(HOST, PORT, service_name =SERVICE_NAME)
conn = cx_Oracle.connect(USER,PASSWORD,tns)

#カーソルの取得
cur = conn.cursor()

#一括挿入
cur.executemany("insert into user01.oracle_insert (col1, col2, col3) values (:1, :2 ,:3)", dataset)

#コミット
conn.commit()

#コネクション切断
conn.close()

一括挿入するための仕掛けとしてはexecutemany()メソッドを使う部分です。このメソッドを使うことで、一行づつのレコード挿入ではなく一括で挿入してくれます。

まとめ

一括挿入のコード自体はシンプルに書けました。ただ、パフォーマンスについては検証できていないので、今後時間など測ってみたいと思います。

以上

Pythonを一から学ぶのにおすすめの本はコチラ

Related

-Oracle, Python
-,

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です