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()メソッドを使う部分です。このメソッドを使うことで、一行づつのレコード挿入ではなく一括で挿入してくれます。

まとめ

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

-Oracle, Python
-,

執筆者:


comment

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

関連記事

【Python】四分位数の計算

Contents1 目的2 データ準備3 四分位数4 四分位偏差5 注意点 目的 これまで、データの平均の考え方とその計算方法について学びました。しかし、データの特性の評価には平均だけでなく、ばらつき …

Python formatの基本的な使い方

Contents1 目的2 文字列整形3 型指定 目的 python3系の文字列操作のメソッドであるformatの基本的な使い方について勉強する。 文字列整形 formatの引数に文字列等(intやf …

Anaconda + PyCharmでWindows python開発環境構築~Hello worldまで

今後、初心者でもコーティングしやすく、データ分析ライブラリが豊富なpython中心でいろいろやっていきたいと思います。まずは、機械学習ライブラリなどが最初からそろったAnacondaパッケージとしてp …

CentOSからAnacondaアンインストール

Contents1 目的2 Step1 : .pyenvの削除3 Step2 : bash_profileのpathの削除4 Step3 : .condaの削除5 Step4 : 確認 目的 以下の記 …

Pythonからデータベース接続(PostgreSQL,Oracle,MySQL)

Contents1 目的2 PostgreSQLの場合3 MySQLの場合4 Oracleの場合 目的 pythonからデータベースに接続するコードをすぐ忘れるので、書き留める PostgreSQLの …

言語切り替え

カテゴリー